Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 在Cypher中聚合后返回节点_Neo4j_Cypher - Fatal编程技术网

Neo4j 在Cypher中聚合后返回节点

Neo4j 在Cypher中聚合后返回节点,neo4j,cypher,Neo4j,Cypher,我很难理解如何在Cypher中正确使用聚合函数 假设我有标记为动物的节点,具有属性、大小和种类。 对于每个物种,我想得到最大的 到目前为止,我了解我可以通过以下方式实现: MATCH (n:Animal) WITH n.species as species, max(n.size) as size RETURN species, size 我将有效地获得相应种类的最大尺寸 但是我怎样才能得到节点而不是物种呢 由于WITH语句,我无法返回n,也无法将其注入WITH,因为它将破坏物种聚合 我知道这

我很难理解如何在Cypher中正确使用聚合函数

假设我有标记为动物的节点,具有属性、大小和种类。 对于每个物种,我想得到最大的

到目前为止,我了解我可以通过以下方式实现:

MATCH (n:Animal)
WITH n.species as species, max(n.size) as size
RETURN species, size
我将有效地获得相应种类的最大尺寸

但是我怎样才能得到节点而不是物种呢

由于WITH语句,我无法返回n,也无法将其注入WITH,因为它将破坏物种聚合

我知道这个问题已经被问过好几次了,但是我遇到的不同的解决方案是针对具体情况的,并且使用了关系

欢迎任何建议

编辑:我终于让它与:

MATCH (n:Animal)
WITH n.species as species, max(n.size) as size, collect(n) as ns
UNWIND ns as n
WITH n
WHERE n.size = size
RETURN n
这是解决问题的办法吗?对我来说,所有节点都是在这里获取的,这似乎有点冗长且效率不高,难道没有更简单的选项吗?

因为MAX aggregation函数不会返回具有MAX值的节点,所以不应该使用它。否则,您必须测试每只动物的大小两次,以获得最大值和您发现的感兴趣节点

您可以使用REDUCE功能只测试一次每只动物的大小:

MATCH (n:Animal)
WITH n.species AS species, COLLECT(n) as ns
RETURN species, REDUCE(s = {size: -1}, a IN ns |
  CASE WHEN a.size > s.size THEN {size: a.size, a: a} ELSE s END
) AS result;

这是我们的max和min聚合函数经常遇到的限制,因此我们添加了一个有帮助的:apoc.agg.maxItems:

apoc.agg.maxItemsitem,value,groupLimit:-1-返回一个映射{items:[],value:n},其中value是存在的最大值,并且项都是具有相同值的项。可以选择限制项目的数量

MATCH (n:Animal)
WITH n.species as species, apoc.agg.maxItems(n.size, n) as sizeData
RETURN species, sizeData.value as size, sizeData.items as animals