如何删除cypher返回的较小路径,这些路径已包含在同一结果中包含的其他较长路径中?
例如,如果我的密码是MATCH path=(n)-[:REL*]->(m) where id(n)=<some id> return path
。因此,它返回包含任意数量类型[:REL]
的传出关系的所有路径。但是,它为更长的路径(包含2个以上的节点)返回多个路径,每个路径包含指向起始节点的较长路径中的后续节点的路径。例如,它可能会返回以下路径:
(a)-[:REL]->(b)
(a)-[:REL]->(b)-[:REL]->(c)
(a)-[:REL]->(b)-[:REL]->(c)-[:REL]->(f)
(a)-[:REL]->(b)-[:REL]->(d)
(a)-[:REL]->(c)
(a)-[:REL]->(c)-[:REL]->(e)
您可以注意到(a)-[:REL]->(b)
包含在所有
(a)-[:REL]->(b)-[:REL]->(c)-[:REL]->(f)
(a)-[:REL]->(b)-[:REL]->(c)
和(a)-[:REL]->(b)-[:REL]->(d)
, (a)-[:REL]->(c)
包含在(a)-[:REL]->(c)-[:REL]->(e)
(a)-[:REL]->(b)-[:REL]->(c)
包含在(a)-[:REL]->(b)-[:REL]->(c)-[:REL]->(f)
我不希望(a)-[:REL]->(b)
,(a)-[:REL]->(c)
和(a)-[:REL]->(b)-[:REL]->(c)
出现在输出中,因为它们是其他路径的一部分。
这可能与密码一起使用吗?不知怎的,我觉得(虽然觉得这感觉很奇怪),cypher应该在关系规范之前允许!
(逻辑上没有)暗示特定类型的关系不会离开(或进入)节点。我本来可以写的:
MATCH path=(n)-[:REL*]->(m)!-[:REL]->() where id(n)=<some id> return path
这将禁止那些较小的路径。
无论如何,我怎么能在密码中做到?
答案 0 :(得分:1)
您可以为此添加过滤,仅返回结束节点没有传出:REL关系的路径:
MATCH path=(n)-[:REL*]->(m)
where id(n)=<some id> and not (m)-[:REL]->()
return path