其中 (A)-[:Relationship]->(B) 和 (B)-[:Relationship]->(C) 使用相同的关系(在本例中为 :Relationship),我想写一个密码条件查询,如果二级关系(A)->(C)的个数大于x,则不显示(B)->(C),即只显示(A)->(B ).
我尝试做类似的事情:
MATCH(A) WHERE id(A)={id}
OPTIONAL MATCH p=(A)-[:Relationship]->(B)
OPTIONAL MATCH q=(A)-[:Relationship]->(B)-[:Relationship]->(C)
RETURN A, p, CASE WHEN COUNT(q)<10 THEN q ELSE [] END AS foo
问题是 foo 总是 q
最佳答案
您是否考虑过匹配具有最大长度的任意路径?沿着这些思路?
MATCH path=(n:Node {name: {id} })-[:RELATIONSHIP*0..9]->(:Node)
RETURN PATH
或者,您可以使用 APOC,它允许您参数化路径的深度。
MATCH (one:Node {name : {id} })
CALL apoc.path.expand(one, "RELATIONSHIP>", "+Node", 0, {n}) YIELD path AS p
return p
如果您想从起始节点找到特定深度 {n}
的所有节点,但仅当它们小于特定阈值时才返回它们 {lim}
然后你可以做这样的事情
MATCH (one:Node {name : {id} })
CALL apoc.path.expand(one,"RELATIONSHIP>","+Node", 0, {n}) yield path as p
WITH collect(nodes(p)[{n}]) AS nodes_at_depth
RETURN
CASE
WHEN size(nodes_at_depth) < {lim} then nodes_at_depth
ELSE []
END AS nodes_at_depth
或者,您可以只返回该深度的第一个 {lim}
节点
MATCH (one:Node {name : {id} })
CALL apoc.path.expand(one,"RELATIONSHIP>","+Node", 0, {n}) yield path as p
WITH collect(nodes(p)[{n}]) AS nodes_at_depth
RETURN nodes_at_depth[0..{lim}]
关于neo4j - 如何使用条件返回密码中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43610456/