In a Neo4j database with a couple of nodes and relationships, I am trying to find out the most "popular" users (in this case: The nodes participating in most relationships):
START n=node:user('*:*')
MATCH (n)-[r]->(x)
RETURN n
ORDER BY COUNT(r) DESC
LIMIT 10
However, this query (Neo4j 1.9.2) results in the following error:
ThisShouldNotHappenError
Developer: Andres claims that: Aggregations should not be used like this.
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.PipeWithSource.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)
Any ideas on how I can express this differntly?
In terms of neo4j mannual, if you need to use an aggregration in your "Order by", you must include the aggregration in your "Return", so you just need to add the count(r) in your "Return" as shown below,
START n=node:user('*:*')
MATCH (n)-[r]->(x)
RETURN n, COUNT(r)
ORDER BY COUNT(r) DESC
LIMIT 10
Introduce a WITH
here:
START n=node:user('*:*')
MATCH (n)-[r]->()
WITH n, count(r) as c
RETURN n, c
ORDER BY c DESC
LIMIT 10
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With