如何查找与X相关的节点并计算其中有多少与Y相关

时间:2013-11-07 17:26:45

标签: neo4j cypher

我的数据库包含人员和事件作为节点。一个人可以:知道另一个人,:创造或:参加一个事件。

从查询人员开始,我想收到一份我知道创建的所有活动的清单,参加活动的人数(如果有的话),以及我认识的人数参加此活动(如果有任何)。

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

  

活动|计数(出席)| 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的活动?

1 个答案:

答案 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))