Neo4j - 为每个节点返回多组行

时间:2017-06-27 14:37:59

标签: neo4j cypher

我有1000个员工节点,他们属于7个部门。我正在尝试按照降序将财务部门中每位员工发送的前10条消息发送给其他员工。我还希望他发送消息的员工分工。我根据这两个问题给出的答案使用以下查询: return top n results for each query in Neo4jGetting top n records for each group in neo4j, 但我得到的结果是每个员工向每个部门的其他员工发送的前10条消息(每个员工共有70条消息)。我希望结果包括所有部门,而不是每个部门的10个结果。

我使用的查询是:

MATCH(e:Employee{div:'finance'}),(b:Employee)
OPTIONAL MATCH (e)-[r:Message]->(b)
WITH e.name as em, b.division_name as bm,coalesce(r.NUMBER_OF_MESSAGES,0) 
as msg 
ORDER BY msg DESC 
WITH collect(msg) AS bts, em, bm
UNWIND bts[0..10] AS r
RETURN em, bm, r

我应该对此查询进行哪些更改?提前致谢

1 个答案:

答案 0 :(得分:3)

Ram,我认为这样做的好选择是使用APOC Procedure apoc.cypher.run。通过此过程,您将能够为在财务部门工作的每个员工运行“子查询”。请安装APOC程序并尝试:

MATCH(e:Employee{div:'finance'})
CALL apoc.cypher.run('
    WITH {e} AS e
    OPTIONAL MATCH (e)-[r:ACTED_IN]->(b:Employee)
    RETURN e.name, b.division_name, coalesce(r.NUMBER_OF_MESSAGES,0) as messages
    ORDER BY messages DESC
    LIMIT 10',
{e:e}) YIELD value
return value

注意:请记住根据Neo4j的版本安装APOC程序。请参阅this link