小编mda*_*alp的帖子

Cypher:如何找到所有单节点不重复的链?

我想找到从/到特定节点的所有路径。我希望路径中的每个节点只出现一次。

\n\n

例如,在这样的图中:

\n\n
(a)-[:REL]->(b)-[:REL]->(c)-[:REL]->(a)\n(a)-[:REL]->(e)-[:REL]->(f)-[:REL]->(a)\n(e)-[:REL]->(b)\n
Run Code Online (Sandbox Code Playgroud)\n\n

以图形方式:

\n\n
  e \xe2\x86\x92 b\n \xe2\x86\x99 \xe2\x86\x96 \xe2\x86\x97 \xe2\x86\x98\nf \xe2\x86\x92 a \xe2\x86\x90 c\n
Run Code Online (Sandbox Code Playgroud)\n\n

密码:

\n\n
CREATE (a { name:'A' })-[:REL]->(b {name:'B'})-[:REL]->(c { name:'C' })\n       -[:REL]->(a)-[:REL]->(e {name:'E'})-[:REL]->(f {name:'F'})-[:REL]->(a),\n       (e)-[:REL]->(b)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望从(a)开始的链研究能够回归

\n\n
(a)->(b)->(c)->(a)\n\n(a)->(e)->(f)->(a)\n\n(a)->(e)->(b)->(c)->(a)\n
Run Code Online (Sandbox Code Playgroud)\n\n

而从 (f) 开始仅返回

\n\n
(f)->(a)->(e)->(f)\n
Run Code Online (Sandbox Code Playgroud)\n\n

并不是

\n\n
(f)->(a)->(b)->(c)->(a)->(e)->(f)\n
Run Code Online (Sandbox Code Playgroud)\n\n

因为它两次通过节点 (a)。

\n\n

我尝试过:

\n\n
MATCH p=(a {name:'F'})-[:REL*1..]->(a) \nWHERE SINGLE(e1 IN TAIL(NODES(p)) WHERE SINGLE(e2 IN TAIL(NODES(p)) WHERE e1=e2))\nRETURN p\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我没有得到结果。\n我能达到的最好结果是不重复此查询的起始节点:

\n\n
MATCH p=(a {name:'F'})-[:REL*1..]->(a) \nWHERE SINGLE(e IN TAIL(NODES(p)) WHERE …
Run Code Online (Sandbox Code Playgroud)

repeat neo4j chain cypher

6
推荐指数
1
解决办法
2047
查看次数

标签 统计

chain ×1

cypher ×1

neo4j ×1

repeat ×1