我对Neo4j比较新,所以如果对这个问题有明显的答案我会道歉。我有一个带有用户节点,帐户节点和它们之间的ASSIGNED_TO关系的数据库。我有一个查询(下面)来获取用户和分配的帐户,但我也希望获得在同一查询中找到的用户数,而不管LIMIT / SKIP结果如何。似乎正在发生的是,用户数是基于OPTIONAL MATCH结果,而不是MATCH查询的结果。
我在数据库中有3个用户和3个帐户,其中2个用户分配到2个帐户,1个用户只分配到一个帐户。
这是查询:
MATCH (user:User) WITH user OPTIONAL MATCH (user)-[assigned:ASSIGNED_TO]-(account:Account) RETURN user, count(user) as userCount, collect(account) as accounts SKIP 0 LIMIT 25
结果如下:
user userCount accounts {id: 2} 1 [{id: 2}] {id: 1} 2 [{id: 2}, {id: 1}] {id: 3} 2 [{id: 1}, {id: 3}]
我希望所有行的userCount值为3。如果我改变计数(用户)'计算(DISTINCT用户)'我为userCount得到1。我希望尽可能避免运行2个单独的查询。
答案 0 :(得分:3)
一个收集 - 展开对应该可以做到这一点
MATCH (user:User)
WITH collect(user) as users, count(DISTINCT user) as userCount
UNWIND users as user
OPTIONAL MATCH (user)-[assigned:ASSIGNED_TO]-(account:Account)
RETURN user, userCount, collect(account) as accounts
SKIP 0 LIMIT 25
答案 1 :(得分:3)
// Get user count
MATCH (user:User) WITH count(user) as userCount
// Get user
MATCH (user:User)
// To optimize a query, first apply the pagination
WITH user, userCount SKIP 0 LIMIT 25
// The other part of query
OPTIONAL MATCH (user)-[assigned:assigned_to]-(account:Account)
RETURN user,
userCount,
collect(distinct account) as accounts