按关系计数排序节点 - > ThisShouldNotHappenError

Mat*_*ias 10 neo4j cypher

在具有几个节点和关系的Neo4j数据库中,我试图找出最"流行"的用户(在这种情况下:参与大多数关系的节点):

START n=node:user('*:*')
MATCH (n)-[r]->(x)
RETURN n
ORDER BY COUNT(r) DESC
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

但是,此查询(Neo4j 1.9.2)导致以下错误:

ThisShouldNotHappenError

开发人员:Andres声称:聚合不应该像这样使用.

StackTrace:org.neo4j.cypher.internal.commands.expressions.AggregationExpression.apply(AggregationExpression.scala:31)org.neo4j.cypher.internal.commands.expressions.AggregationExpression.apply(AggregationExpression.scala:29)org.neo4j. cypher.internal.pipes.ExtractPipe $$ anonfun $ internalCreateResults $ 1 $$ anonfun $ apply $ 1.apply(ExtractPipe.scala:47)org.neo4j.cypher.internal.pipes.ExtractPipe $$ anonfun $ internalCreateResults $ 1 $$ anonfun $ apply $ 1.apply(ExtractPipe.scala:45)scala.collection.immutable.Map $ Map1.foreach(Map.scala:109)org.neo4j.cypher.internal.pipes.ExtractPipe $$ anonfun $ internalCreateResults $ 1.apply(ExtractPipe. scala:45)org.neo4j.cypher.internal.pipes.ExtractPipe $$ anonfun $ internalCreateResults $ 1.apply(ExtractPipe.scala:44)scala.collection.Iterator $$ anon $ 11.next(Iterator.scala:328)org. neo4j.cypher.internal.pipes.TopPipe.internalCreateResults(TopPipe.scala:45)org.neo4j.cypher.internal.pipes.PipeWithSource.createResults(Pipe.scala:69)org.neo4j.cypher.internal.pipes.PipeWithSourc e.createResults(Pipe.scala:66)org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl.org $ neo4j $ cypher $ internal $ executionplan $ ExecutionPlanImpl $$ prepareStateAndResult(ExecutionPlanImpl.scala:164)org.neo4j.cypher.internal .executionplan.ExecutionPlanImpl $$ anonfun $ getLazyReadonlyQuery $ 1.apply(ExecutionPlanImpl.scala:139)org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl $$ anonfun $ getLazyReadonlyQuery $ 1.apply(ExecutionPlanImpl.scala:138)org.neo4j.cypher .internal.executionplan.ExecutionPlanImpl.execute(ExecutionPlanImpl.scala:38)org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:72)org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:76)org.neo4j .cypher.javacompat.ExecutionEngine.execute(ExecutionEngine.java:79)org.neo4j.server.rest.web.CypherService.cypher(CypherService.java:94)java.lang.reflect.Method.invoke(Method.java:611 )org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)

关于如何表达这种不同的任何想法?

小智 19

就neo4j手册而言,如果您需要在"Order by"中使用聚合,则必须在"Return"中包含聚合,因此您只需在"Return"中添加count(r),如下所示,

START n=node:user('*:*')
MATCH (n)-[r]->(x)
RETURN n, COUNT(r)
ORDER BY COUNT(r) DESC
LIMIT 10
Run Code Online (Sandbox Code Playgroud)


Ste*_*ter 5

WITH这里介绍一下:

START n=node:user('*:*')
MATCH (n)-[r]->()
WITH n, count(r) as c
RETURN n, c
ORDER BY c DESC
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

  • +1你实际上只需将它添加到返回:`返回n,计数(r)为c命令c`,"WITH"不是必需的. (4认同)