1

我的数据库包含人员和事件作为节点。一个人可以 :KNOW 另一个人、:CREATE 或 :ATTEND 一个事件。

从查询人开始,我想收到我认识的人创建的所有事件的列表,参加该活动的人数(如果有的话),以及我知道有多少人参加了这个活动(如果有的话)。

所以我的结果应该是这样的:

活动 | 计数(出席) | 数(参加的朋友)

事件 A 9 3
事件 B 3 0
事件 C 0 0

我得到事件和计数(参加)

START me=node(1)  
MATCH (me)-[:KNOWS]-(creator)-[:CREATED]-(event), (Attender)-[?:ATTEND]-(event)  
RETURN event, count(Attender)

[?:ATTEND] 是可选的,因为否则它将消除没有参加者的事件。

但是,我不知道如何查询我认识的有多少人参加了活动(也就是有多少朋友会在那里)。

问题是,如果我知道没有任何参加者,使用 Match 会消除找到的事件:

WITH n, event  
MATCH (n)-[:KNOWS]-(friend)-[:ATTEND]-(event)

使这些关系成为可选并没有帮助,因为它要么返回所有参加者,要么返回所有朋友。

拆分查询会给我几个相同事件的列表。

如何在一个结果集中与正在参加的朋友一起举办有参加者和没有参加者的活动?

4

1 回答 1

1

如何在“参加者”的集合中添加一个过滤器来获得这样的朋友参加者,

START me=node(1)  
MATCH (me)-[:KNOWS]-(creator)-[:CREATED]-(event), (Attender)-[?:ATTEND]-(event)
With event as e, collect(Attender) as attenders, me
Return e, length(attenders), length(filter(x in attenders where (me)-[:KNOWS]->x))
于 2013-11-07T19:24:35.697 回答