我是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中,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/

10-10 07:30