gpt4 book ai didi

python - 如何获取不相交子图中的所有节点 - neo4j/py2neo

转载 作者:行者123 更新时间:2023-11-30 23:04:46 25 4
gpt4 key购买 nike

如果我有一个 neo4j 数据库,并且我想查询以获取一个特定的不相交子图中的所有节点。 (在 py2neo 或 cypher 中)

如果我有节点组,则每个组中的节点通过该组内的关系连接,但在组之间不连接。我可以查询一个节点并获取该节点组中的所有节点吗?

最佳答案

[已更新]

原始答案

如果“节点组”指的是“不相交子图”,则以下是如何获取包含特定节点(例如 Neo )的不相交子图中(具有任何类型的关系)中的所有节点。节点):

MATCH (n { name: "Neo" })
OPTIONAL MATCH p=(n)-[*]-(m)
RETURN REDUCE(s = [n], x IN COLLECT(NODES(p)) |
REDUCE(t = s, y IN x | CASE WHEN y IN t THEN t ELSE t + y END )) AS nodes;

此查询使用 OPTIONAL MATCH查找与Neo“相关”的节点节点,这样如果该节点没有关系,查询仍然能够返回结果。

两个(嵌套)REDUCE子句确保返回的集合仅具有不同的节点。

外层REDUCE子句使用 n 初始化结果集合节点,因为它必须始终位于不相交的子图中,即使没有其他节点。

更好的答案

MATCH p=(n { name: "Neo" })-[r*0..]-(m)
WITH NODES(p) AS nodes
UNWIND nodes AS node
RETURN DISTINCT node

这个更简单的查询(返回节点行)使用 [r*0..]允许 0 长度路径(即 n 不需要有任何关系 - 并且 m 可以与 n 相同)。它使用 UNWIND转动nodes节点集合分成行,然后使用 DISTINCT消除重复项。

替代解决方案(由于错误,尚无法工作)

下面的替代解决方案(返回节点行)也应该有效,除了当前存在一个错误( that I just reported ),该错误会导致查询展开 NULL 后所有标识符被遗忘。 (例如,如果 OPTIONAL MATCH 未能找到匹配项,则可能会发生这种情况)。由于此错误,如果 Neo节点没有关系,下面的查询当前没有返回结果。因此,您必须使用上面的查询,直到错误得到修复。

MATCH (n { name: "Neo" })
OPTIONAL MATCH p=(n)-[*]-(m)
WITH n, NODES(p) AS nodes
UNWIND nodes AS node
RETURN DISTINCT (
CASE
WHEN node IS NULL THEN n
ELSE node END ) AS res;

关于python - 如何获取不相交子图中的所有节点 - neo4j/py2neo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33549833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com