neo4j - Neo4J 每个唯一目标节点获得 N 个最新关系?
问题描述
使用下图:
如何编写一个查询,该查询将返回唯一目标节点的 N 个最新关系?
例如,这个查询:MATCH (p)-[r:RATED_IN]->(s) WHERE id(p)={person} RETURN p,s,r ORDER BY r.measurementDate DESC LIMIT {N}
with N = 1 将返回最新的关系,无论是 RATED_IN Team Lead 还是 Programming,但我想按每种类型获取 N 个最新的。当然,在 N = 2 的情况下,我想要每个技能节点的 2 个最新测量值。
我想要 Team Lead 的最新关系和编程的最新关系。
我该如何编写这样的查询?
- 编辑 -
MATCH (p:Person) WHERE id(p)=175
CALL apoc.cypher.run('
WITH {p} AS p
MATCH (p)-[r:RATED_IN]->(s)
RETURN DISTINCT s, r ORDER BY r.measurementDate DESC LIMIT 2',
{p:p}) YIELD value
RETURN p,value.r AS r, value.s AS s
解决方案
这是一篇关于限制每行 MATCH 结果的 Cypher 知识库文章,其中有一些关于如何在给定当前限制的情况下完成此任务的不同建议。使用 APOCapoc.cypher.run()
使用 LIMIT 执行带有 RETURN 的子查询就可以了,因为它是每行执行的(因此 LIMIT 是每行)。
请注意,对于年底即将发布的 Neo4j 4.0 版本,我们将获得一些不错的 Cypher 好东西,这将使这变得更加容易。请继续关注,因为我们会在即将发布时披露更多细节!