neo4j - 在 Neo4j 中为每个查询返回前 n 个结果

标签 neo4j cypher

我一直在尝试在密码查询中执行以下任务,但没有得到正确的结果。其他 stackoverflow 问题讨论了限制或收集,但我认为这不足以完成以下任务。

任务:
我有 (p:Product) 节点,并且在两个产品节点之间有一个名为“BOUGHT_TOGETHER”的关系。那是

(p:Product)-[b:BOUGHT_TOGETHER]-(q:Product)

关系 b 有一个名为“size”的属性,其中包含一些数字。我想返回按大小排序的每个产品关系的前 3 个结果。例如,查询结果应如下所示。
+------------------------+
| p.id  | q.id | b.size      |
+------------------------+
   1      2      10
   1      3       8
   1      5       7
   2      21      34
   2      17      20
   2      35      15
   3      5       49
   3      333     30
   3       65      5
   .       .       .
   .       .       .
   .       .       .

有人可以告诉我如何编写密码查询以达到预期的结果吗?谢谢!

最佳答案

另一种解决方案是首先对关系进行排序,将它们放入一个集合中,然后仅对集合的第 3 个结果进行 UNWIND:

MATCH (p:Product)-[r:BOUGHT_TOGETHER]->(:Product)
WITH p, r
ORDER BY r.size DESC 
WITH p, collect(r) AS bts 
UNWIND bts[0..3] AS r
RETURN p.uuid as pid, endNode(r).uuid as qid, r.size as size

在这里测试控制台:http://console.neo4j.org/r/r88ijn

注意:重新阅读 jjaderberg 的答案后,这有点相似,只是我认为更具可读性。为什么我投票支持他的答案。

关于neo4j - 在 Neo4j 中为每个查询返回前 n 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32907134/

相关文章:

neo4j - 如何在 Neo4j 密码查询中仅返回末端/叶节点?

java - @QueryResult 映射错误

python - 尝试从 Django 连接 Neo4j 数据库时出现错误

neo4j - 如何在Cypher中编写负关系条件

neo4j - 设置标签 : pass label name as parameter

javascript - 如何通过使用属性(n)的密码请求获取 Node ID?

csv - Neo4j Cypher-使用LOAD CSV创建节点并设置标签

database - RDBMS 能做什么 Neo4j(和图形数据库)做不到的事情?

java - 适用于 Java 的 Neo4j 连接器

performance - 连接两组节点的高效密码查询匹配子图