Neo4j 在新查询中使用每个结果
Neo4j use each result in new query
我一边玩狗谱系图一边学习 Neo4j。以下查询为我提供了与多个节点具有 :PARENT_OF 关系的所有节点。
match (n)-[r:PARENT_OF]->() with n, count(r) as rel_cnt where rel_cnt > 1 return n;
对于示例图,这会产生两个节点。现在我想将它与下一个查询结合起来,以获取固定子项 (A) 和可变父项(第一个查询的结果)之间的路径:
match p =(child:Dog {name: "A"})<-[:PARENT_OF*0..]-(parent:Dog {name: "X"}) return p
我看过 WITH 子句,但无法理解它。非常感谢任何有关如何将第一个查询的结果提供给第二个查询的建议!
请查看此 Neo4j 控制台以获取示例图 http://console.neo4j.org/?id=6nm2e3
一个简单的建议,你可以使用一个技巧从节点获取关系类型的度数,这比扩展关系并获取它的计数要高效得多。
此外,在这种特殊情况下,您不必使用 WITH,您可以立即重复使用 n
变量。
MATCH (n)
WHERE size((n)-[r:PARENT_OF]->()) > 1
MATCH p =(child:Dog {name: "A"})<-[:PARENT_OF*0..]-(n) return p
至于 WITH,它用于重新定义查询的下一部分范围内的变量,通常是您可以更改结果记录的地方,例如通过投影节点和关系的属性,使函数调用等等。
首先获取所有 parents 超过 1 child 只是为了获取从特定 child 到其 parents 的路径是不必要的(而且效率低下)谁拥有超过 1 child.
相反,您可以只获取特定的 child,然后查看每个 parents 有多少 children。例如:
MATCH p = (child:Dog {name: "A"})<-[:PARENT_OF]-(n)
WHERE SIZE((n)-[:PARENT_OF]->()) > 1
RETURN p;
我一边玩狗谱系图一边学习 Neo4j。以下查询为我提供了与多个节点具有 :PARENT_OF 关系的所有节点。
match (n)-[r:PARENT_OF]->() with n, count(r) as rel_cnt where rel_cnt > 1 return n;
对于示例图,这会产生两个节点。现在我想将它与下一个查询结合起来,以获取固定子项 (A) 和可变父项(第一个查询的结果)之间的路径:
match p =(child:Dog {name: "A"})<-[:PARENT_OF*0..]-(parent:Dog {name: "X"}) return p
我看过 WITH 子句,但无法理解它。非常感谢任何有关如何将第一个查询的结果提供给第二个查询的建议!
请查看此 Neo4j 控制台以获取示例图 http://console.neo4j.org/?id=6nm2e3
一个简单的建议,你可以使用一个技巧从节点获取关系类型的度数,这比扩展关系并获取它的计数要高效得多。
此外,在这种特殊情况下,您不必使用 WITH,您可以立即重复使用 n
变量。
MATCH (n)
WHERE size((n)-[r:PARENT_OF]->()) > 1
MATCH p =(child:Dog {name: "A"})<-[:PARENT_OF*0..]-(n) return p
至于 WITH,它用于重新定义查询的下一部分范围内的变量,通常是您可以更改结果记录的地方,例如通过投影节点和关系的属性,使函数调用等等。
首先获取所有 parents 超过 1 child 只是为了获取从特定 child 到其 parents 的路径是不必要的(而且效率低下)谁拥有超过 1 child.
相反,您可以只获取特定的 child,然后查看每个 parents 有多少 children。例如:
MATCH p = (child:Dog {name: "A"})<-[:PARENT_OF]-(n)
WHERE SIZE((n)-[:PARENT_OF]->()) > 1
RETURN p;