仅返回Neo4j Cypher查询中的简单路径

Mar*_*ace 15 traversal neo4j cypher

给出如下查询:

START n = node(123)
MATCH p = n-[r:LIKES*..3]->x
RETURN p;
Run Code Online (Sandbox Code Playgroud)

我通过上面的查询得到的结果路径包含循环.

我怎样才能返回简单的路径?

鉴于这个例子:

  • 如何避免重复节点的路径,如:[Neo,Morpheus,Trinity,Morpheus,Neo]

Mic*_*ger 16

指定路径的唯一性是密码的计划特征.

所以现在我们必须确定路径中没有节点是重复的.

有一个ALL谓词必须适用于集合的所有元素(路径是).并且filter您可以提取集合的元素,因为某个条件成立.

START neo=node(1) 
MATCH path= neo-[r:KNOWS*..4]->other 
WHERE ALL(n in nodes(path) where 
          1=length(filter(m in nodes(path) : m=n))) 
RETURN neo, LENGTH(path) AS length, EXTRACT(p in NODES(path) : p.name), other 
ORDER BY length
Run Code Online (Sandbox Code Playgroud)

所以我做的是:

  • 对于路径的所有节点 n
  • 过滤等于的节点的路径 n
  • 确定该length集合
  • 断言ALL它必须是每个一个n

请参阅:http://console.neo4j.org/r/dpalbl

  • 嗨,迈克尔,有关此计划功能的任何更新? (5认同)