我有1000个员工节点,他们属于7个部门。我正在尝试按照降序将财务部门中每位员工发送的前10条消息发送给其他员工。我还希望他发送消息的员工分工。我根据这两个问题给出的答案使用以下查询: return top n results for each query in Neo4j 和Getting 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
我应该对此查询进行哪些更改?提前致谢
答案 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。