neo4j - 如何使用条件返回密码中的数据?

标签 neo4j cypher

我在 Neo4j 中有一个看起来像这样的关系 enter image description here

其中 (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/

相关文章:

neo4j - 图数据库中的关系属性就是关系

neo4j - SyntaxError, "Unknown procedure output: ` node`"是什么意思?

database - Neo4j 获取所有节点和两个给定节点之间的关系

docker - Neo4j + Docker - 无法创建 JVM

python - 在 NeoModel 中创建之前查看节点是否存在

neo4j - 用于搜索列表的 Cypher 查询

csv - Neo4j 使用带有空值的 MERGE

ubuntu - Neo4j 配置文件更改没有效果

shell - 从 cypher neo4j-shell 向控制台输出状态消息