Neo4j Cypher:查找/合并至少有2个公共节点的节点节点、Neo4j、Cypher

2023-09-03 12:16:23 作者:超大好き!(超喜欢你)

我是Graph DB和Neo4j的新手,需要帮助来查询至少有2个公共节点的数据

Graph

neo4j查询带关系的节点,如果没有关联节点,返回父节点和null optional

从上图中,我需要获取ROW1和Row2的详细信息,因为它是两个公共节点ID_B和ID_C

Graph 2 with more nodes having common neighbor

使用图表2,我需要将第1行、第2行和第3行的详细信息合并为 第1行和第2行ID_B、ID_C相同 第2行和第3行的ID_A、ID_B和C相同

推荐答案

我认为这样就可以了:

MATCH(r1:ROW)-[:HAS_ID]->(i)<-[:HAS_ID]-(r2:ROW)
WHERE id(r1) > id(r2)
WITH r1,r2, COLLECT(i) AS is
WHERE SIZE(is) > 1
RETURN r1,r2

如果您有多条记录,并且希望查询返回具有两条或多条共同记录的唯一记录列表,您可以执行以下操作:

MATCH(r1:ROW)-[:HAS_ID]->(i)<-[:HAS_ID]-(r2:ROW)
WHERE id(r1) > id(r2)
WITH [r1,r2] AS nodePair, COLLECT(i) AS is
WHERE SIZE(is) > 1
UNWIND nodePair AS node
RETURN DISTINCT node