简单的递归CYPHER查询

Hoo*_*ked 11 neo4j cypher

这是一个非常简单的问题,但是第一次阅读文档,我无法弄清楚如何构造这个查询.假设我的图表看起来像:

在此输入图像描述

此外,每个人都有与之相关的年龄. 什么CYPHER查询将为我提供约翰的年龄和约翰的整个朋友树的所有年龄的列表?

到目前为止我尝试过的:

MATCH (start)-[:friend]>(others)
 WHERE start.name="John"
 RETURN start.age, others.age
Run Code Online (Sandbox Code Playgroud)

这有几个问题,

  1. 这只是一个朋友的深度,我想去约翰的所有朋友.

  2. 它不返回列表,而是返回一系列列表(john.age, other.age).

Ras*_*ash 28

所以你需要的不仅是约翰的朋友,也是朋友的朋友.因此,您需要告诉neo4j递归地深入图表.

此查询深入2级.

MATCH (john:Person { name:"John" })-[:friend *1..2]->(friend: Person)
RETURN friend.name, friend.age;
Run Code Online (Sandbox Code Playgroud)

为了n深入,不要放任何东西,即*1..

哦,我也在neo4j中找到了这个很好的例子

那么这*1..2意味着什么:

* 表示它的递归.

1表示不包含john本身,即是起始节点.如果你在这里加0,它也将包括它John node自己.

.. 表示从这个节点走到......

2表示递归的级别.在这里你说停在2级.即不要超越史蒂夫.如果你没有放任何东西,它会继续前进,直到它找不到"有"朋友关系的节点

这些类型的查询匹配的文档在这里和类似的答案在这里.

  • 这里有一个很好的递归长度说明(包括图片):https://graphaware.com/graphaware/2015/05/19/neo4j-cypher-variable-length-relationships-by-example.html (2认同)