在 neo4j 中查找表亲节点

Finding cousin nodes in neo4j

我正在尝试从一个共同的橙色祖先派生出两个特定的蓝色节点(下图)。这是我试过的一个查询 returns 没有:

MATCH (b1:Blue{...properties})<-[*2]-(:Orange{...})-[*2]->(b2:Blue{...}) RETURN (b1), (b2)

这样的事情也行不通:

MATCH (b1:Blue{...})<-[*2]-(o:Orange{...}), (b2:Blue{...})<-[*2]-(o) RETURN (b1), b2)

我能得到我期望的结果的唯一方法是使用这个笨拙的查询:

MATCH (b1:Blue{...}), (b2:Blue{...}), (r:Resource{...})
WHERE EXISTS ( (r)-[*2]->(p) ) AND EXISTS ( (r)-[*2]->(c) )
RETURN (b1), (b2)

图表如下所示:

编辑:

MATCH (f:Brown)<-[:CONTAINS]-(:Orange)
WITH f
MATCH (b1:Blue)<-[:CONTAINS]-(f)-[:CONTAINS]->(b2:Blue)
RETURN b1,b2
LIMIT 1

这个 return 这个数据上的两个蓝色节点作为 b1 和 b2:

MERGE (a:Orange {name: "A"})
MERGE (b:Brown {name: "B"})
MERGE (c:Brown {name: "C"})
MERGE (d:Blue {name: "D"})
MERGE (e:Blue {name: "E"})

MERGE (a)-[:CONTAINS]-(b)
MERGE (a)-[:CONTAINS]-(c)
MERGE (b)-[:FOLLOWS]-(c)
MERGE (c)-[:CONTAINS]-(d)
MERGE (c)-[:CONTAINS]-(e)
MERGE (d)-[:DEP]-(e)

b1 和 b2 总是成对出现吗?如果是,那么您的第一次尝试查询几乎是正确的。如果 b1, b2, b3,... 不是成对的 (>2) 则仅 return 收集的节点 b2.

MATCH  (:Orange )-[*2]->(b2:Blue ) 
WITH collect(b2) as collected_blue 
RETURN collected_blue[0] as b1, collected_blue[1] as b2

另外,当你走过一条路时,你不能重复它。这就是为什么您的第一个查询 return 没有结果。