我的数据库包含人员和事件作为节点。一个人可以:知道另一个人,:创造或:参加一个事件。
从查询人员开始,我想收到一份我知道创建的所有活动的清单,参加活动的人数(如果有的话),以及我认识的人数参加此活动(如果有任何)。
所以我的结果应该是这样的:
活动|计数(出席)| count(FriendswhoAttend)
活动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]是可选的,因为它会消除没有出席者的事件。
但是,我无法弄清楚如何查询我认识的人数(也就是有多少朋友)。
问题是,如果我知道没有任何Attenders,使用Match会消除找到的事件:
WITH n, event
MATCH (n)-[:KNOWS]-(friend)-[:ATTEND]-(event)
将这些关系视为可选项并不会有所帮助,因为它可以返回所有参与者或所有朋友。
分割查询会给我几个相同事件的列表。
我如何在一个Resultset中与有朋友一起参加有和没有Attender的活动?
答案 0 :(得分:1)
如何将“过滤器”添加到“Attender”集合中以获取此类朋友参与者,
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))