看来我没有正确理解 OPTIONAL MATCH。
我有一个始终存在的节点 (t)。此节点 (t) 可以与其他节点 (q)、(o) 有关系——可能与两者或仅与其中之一有关。
我想在一个语句中捕捉类似的东西
“显示节点 (t) 的所有信息,如果有相关节点 (o),则显示所有 (o),如果有节点 (q),则显示 (q) - 如果其中之一不可用显示你有什么”
我可以同时进行 qith 匹配和可选匹配,例如
MATCH (t) -- (o) WHERE t.id = "1234"
OPTIONAL MATCH (t) -- (q)
RETURN q,t,o
无论是否有 (q),当我在 (t) 和 (o) 之间有一条路径时,我就成功了。但是当我没有(o)但有(q)时,我失败了。如果我切换并将 (q) 放在第一行,将 ((o) 放在第二行,反之亦然,我总是会丢失其中一个。
我需要如何查询才能同时获得 (o)、(q) 或其中一个,而不管它们中有哪一个?
编辑
- 所有节点(t)、(o)和(q)都有附加标签
- 我没有以正确的方式进行查询,因为我认为这无关紧要,所以失败的查询是 匹配 (o:Label3) -- (t:Label1) WHERE t.id = "1234" 可选匹配 (q:Label2) -- (t:Label1) 返回 q,t,o
最佳答案
如果你只是想获取连接到t
的所有节点的集合:
MATCH (t) WHERE t.id = "1234"
OPTIONAL MATCH (t) -- (o)
RETURN t, COLLECT(o) AS others;
关于neo4j - 加入 Cypher 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44686534/