Neo4j同时获取节点和节点数

时间:2016-06-25 16:53:40

标签: neo4j

我对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个单独的查询。

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