gpt4 book ai didi

neo4j - 当仅预期列更改时从 Cypher 返回不同的行

转载 作者:行者123 更新时间:2023-12-01 09:03:37 25 4
gpt4 key购买 nike

我是 Neo4J、Cypher 和 StackOverflow 的新手,所以当我反对协议(protocol)时请告诉我。

我有一个测试 Neo4J 数据库,其中有超过 7k 个节点代表电影以及与每部电影相关的大量关系。我注意到,当我运行按计数排序的查询时,我会根据返回的节点参数返回不同的行。一个具体的例子是当我尝试列出关系最密切的电影时。

这个 CQL 查询

MATCH (m:Movie)-[r]-() 
RETURN m.title, count(r) AS rel_count ORDER BY rel_count DESC LIMIT 10

返回

m.title                 rel_count
The Three Musketeers 184
Scary Movie 3 128
Watchmen 114
Hero 113
Horrible Bosses 2 113
The Longest Yard 112
Carrie 111
The Butterfly Effect 111
Aliens 111
Dick Tracy 110

CQL查询时

MATCH (m:Movie)-[r]-() 
RETURN m.title, m.tmsId, count(r) AS rel_count ORDER BY rel_count DESC LIMIT 10

返回

m.title                       m.tmsId           rel_count
Forrest Gump MV000398520000 106
The Karate Kid MV000125280000 79
Evolution MV001067180000 76
Original Sin MV000790300000 74
Kill Bill: Vol. 2 MV001405480000 74
American Beauty MV000773810000 74
O Brother, Where Art Thou? MV000914040000 73
The Godfather MV000120060000 72
Sin City MV001558150000 71
The Karate Kid Part II MV000205920000 71

我的假设是 MATCH 语句收集节点 m 和关系 r 的数据,而 RETURN 语句只是将输出过滤为特定参数。因此,我希望每次调用都返回相同的列表。有人发现我的 Cypher 或预期有问题吗?

即使我有一个特定的问题,我也想知道为什么会出现这个问题,以便深入了解 Cypher 的语法和执行。如果有帮助,我已经添加了 PROFILE 输出。

Profile Chart 1

Profile Chart 2

最佳答案

我认为你是对的。在 Cypher 中,RETURNWITH 语句仅适用于给定的表格数据。如果您指定聚合函数,例如 count/sum/etc... 那么它会自动根据您指定的其他非聚合列进行分组。

作为调试步骤,如果您尝试这样做会怎样?

MATCH (m:Movie)-[r]-() 
WITH m.title AS title, m.tmsId AS tmsId, count(r) AS rel_count
RETURN title, tmsId, rel_count ORDER BY rel_count DESC LIMIT 10

关于neo4j - 当仅预期列更改时从 Cypher 返回不同的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33790681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com