Neo4j:距离为 3 的 K-Hop 与 Cypher

Neo4j : K-Hop at distance 3 with Cypher

是否可以从起始节点获取恰好距离它 3 的节点?[​​=11=]

我知道使用 Neo4J Java APi 和他的遍历器框架可以实现这个结果:

TraversalDescription td = graphDb.traversalDescription()
                            .breadthFirst()
                            .relationships( Neo4JBenchmark.RelTypes.Knows, Direction.OUTGOING )
                            .uniqueness( Uniqueness.NODE_GLOBAL )
                            .evaluator(Evaluators.excludeStartPosition())
                            .evaluator(Evaluators.fromDepth(3))
                            .evaluator(Evaluators.toDepth(3));
ResourceIterator<Node> traverser = td.traverse(startNode).nodes().iterator();

我想知道我是否可以用 Cypher 做同样的事情?

MATCH path = (a)-[:knows*3..3]->(c)
  WHERE id(a) = startNodeID
  WITH path, 
       shortestPath ( (a)-[:knows*..2]->(c) ) as sPath
    WHERE sPath IS NULL
    UNWIND nodes (path) as node
      WITH path, 
           collect (distinct node) as collect
        WHERE size (collect) = length (path) + 1
RETURN 
  DISTINCT collect [ length (path) ]
  1. 首先我们找到从起始节点开始的所有长度为3的路径
  2. 然后统计每条路径中唯一节点的个数
  3. 如果节点号比路径长度多1,则路径不自相交,return这条路径的最后一个节点

Upd: 添加检查是否有短路径小于要求的长度。