Neo4j:在密码中找到来自同一父母的孩子

时间:2013-03-15 16:07:35

标签: neo4j cypher

我们如何在密码中执行此操作?
n个父母p1,p2,p3 .... pn m个孩子c1,c2,c3 ...... cm
假设 c1 来自(孩子的) p1,p2和p3 ,并且 c2 来自(孩子的) p1, p2和p3
鉴于 c1 ,我们能找到 c2 吗? (来自与c1相同的父母的节点)
一个孩子可以有1 ... n个父母。

1 个答案:

答案 0 :(得分:7)

几周前我实际上在这里问了an extremely similar question,我得到的答案对你来说也只是稍微调整一下。

START c1=node(*), c2=node(*)
MATCH c1-[:ChildOf]->parent<-[:ChildOf]-c2 
WITH c1, c2, count(parent) AS parentsFound
WHERE length(c1-[:ChildOf]->()) = parentsFound
  AND length(c2-[:ChildOf]->()) = parentsFound
  AND c1 <> c2
RETURN c1, c2

注意:据推测,您可以更好地选择c1c2,而不是使用node(*)

此查询的逻辑逐行:

  1. 从所有子项开始c1c2
  2. 查找parentc1
  3. 共享的所有c2
  4. 计算找到的共享parent的数量
  5. 确保找到的parent的数量与parent所拥有的c1的总数相符。
  6. 确保找到的parent的数量与parent所拥有的c2的总数相符。
  7. (可选)不要打扰将节点与自己进行比较
  8. 返回结果!