我是Neo4J,Cypher和StackOverflow的新手,所以当我推销协议时,请告诉我。
我有一个测试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中,RETURN
和WITH
语句仅对给出的表格数据起作用。如果您指定了一个像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/