在具有几个节点和关系的Neo4j数据库中,我试图找出最“流行”的用户(在这种情况下:参与大多数关系的节点):
START n=node:user('*:*')
MATCH (n)-[r]->(x)
RETURN n
ORDER BY COUNT(r) DESC
LIMIT 10
但是,此查询(Neo4j 1.9.2)会导致以下错误:
ThisShouldNotHappenError
开发人员:Andres声称:聚合不应该像 此
堆栈跟踪: 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 $ $适用1.适用(ExtractPipe.scala:47) org.neo4j.cypher.internal.pipes.ExtractPipe $$ anonfun $ internalCreateResults $ 1 $$ anonfun $ $适用1.适用(ExtractPipe.scala:45) scala.collection.immutable.Map $ Map1.foreach(Map.scala:109) org.neo4j.cypher.internal.pipes.ExtractPipe $$ anonfun $ internalCreateResults $ 1.适用(ExtractPipe.scala:45) org.neo4j.cypher.internal.pipes.ExtractPipe $$ anonfun $ internalCreateResults $ 1.适用(ExtractPipe.scala:44) scala.collection.Iterator $$匿名$ 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.PipeWithSource.createResults(Pipe.scala:66) org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl.org $ $ Neo4j的CYPHER $ $内部$ executionplan $$ ExecutionPlanImpl prepareStateAndResult(ExecutionPlanImpl.scala:164) org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl $$ anonfun $ getLazyReadonlyQuery $ 1.适用(ExecutionPlanImpl.scala:139) org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl $$ anonfun $ getLazyReadonlyQuery $ 1.适用(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)
关于如何表达这一点的任何想法都不同?
答案 0 :(得分:18)
就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
答案 1 :(得分:5)
在此处引入WITH
:
START n=node:user('*:*')
MATCH (n)-[r]->()
WITH n, count(r) as c
RETURN n, c
ORDER BY c DESC
LIMIT 10