You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cypher查询如何对collect()返回列表计数并作为WHERE过滤条件

Cypher查询修改方案

你需要先通过WITH子句完成聚合计算,再基于聚合生成的列表长度做过滤,正确的查询写法如下:

MATCH  (a:Academy)-[]-(w:Work)
WITH w, collect(distinct a.name) as Associated_academies_for_this_book
WHERE size(Associated_academies_for_this_book) > 1
RETURN Associated_academies_for_this_book,
       w.shortTitle as book_short_title, 
       w.workId as Book_ID 
ORDER BY size(Associated_academies_for_this_book) DESC

逻辑说明

  1. 先用WITH子句按作品节点w分组,聚合生成每个作品对应的去重关联学院列表,这一步是为了先拿到聚合后的完整结果,才能做后续的过滤操作
  2. 用size()函数直接读取学院列表的元素个数,通过WHERE子句筛掉元素数不大于1的结果
  3. 最后返回需要的字段即可,排序时直接复用已生成的列表计算长度,不需要重复执行collect操作,也能提升查询效率

之前使用count(collect)>1未生效的原因是:count()函数的作用是统计行数或非null值的数量,而collect()已经返回了列表格式的结果,直接用size()读取列表长度才是正确的判断方式,嵌套count和collect会得到不符合预期的统计值。

内容的提问来源于stack exchange,提问作者D'Arrigo Alessio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:06:05