我的数据库中有两种类型的节点"组织"和"用户"这些连接为:
(u : User)-[:TEAMMEMBER_OF | BOARDMEMBER_OF | FOUNDER_OF]->(o : Organisation)
因此,用户可以是团队成员,董事会成员或创始人。现在我必须返回总共少于5个成员的所有组织。它可能比组织没有任何成员。为了计算成员数量,我写了一个像这样的查询
Match (o : Organisation)
Optional Match (o)<-[r:TEAMMEMBER_OF | BOARDMEMBER_OF | FOUNDER_OF]-(u : User)
return o, cnt
但它没有给我正确的每个组织成员数。
答案 0 :(得分:3)
您需要了解count(*)
和count(x)
之间的细微差别。后者计算x的非空值的数量,而前者给出行的数量 - 包括空值。
match (o:Organisation)
optional match (o)<-[r:TEAMMEMBER_OF|:BOARDMEMBER_OF|:FOUNDER_OF]-(u:User)
with o, count(u) as cnt // of Org has no members we get 0
where cnt < 5
return o, cnt