Cypher:在几个交叉链表中旅行

时间:2013-09-26 15:16:56

标签: neo4j cypher

我有一个用户图表。 在此图中,它们也是活动(节点)。每个用户都有一个链接的活动列表:

(user)-[:NEXT_ACTIVITY*]->(activities)

但是有一个棘手的部分:一个活动可以由2个用户拥有。所以我在NEXT_ACTIVITY关系中设置了一个属性“idUser”,其中包含用户的ID。这就是我为1个用户找到所有活动的方法。

START user=node:users('name:JohnDoe')
MATCH (user)-[rel:NEXT_ACTIVITY*]->(activities)
WHERE ALL (r in rel WHERE r.idUser = id(user))

我的问题是我不知道如何使用此系统为多个用户获取活动。如何浏览多个用户的链式列表,并确保所有 NEXT_ACTIVITY 图表旅行属于这些用户?

用例:我想获得用户及其朋友的活动。

此致 圣拉斐尔

Ps:2个用户拥有某个活动的原因是,如果 A B 的墙上发布,则它是A和B的活动。 / p>

1 个答案:

答案 0 :(得分:1)

你可以先得到用户的所有朋友(比如姓名=' u1'),包括用户,因为关系的长度是0..1,然后是每个用户,获得所有活动。

Match u:User-[:FRIEND*0..1]->friend:User
Where u.name = 'u1'
With friend 
Match friend-[rel:NEXT_ACTIVITY*]->activity
Where all(r in rel where r.idUser = id(friend))
Return friend.name, collect(activity.name)

如果您只需要所有活动而不管用户,那么"返回不同的activity.name"