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

MongoDB聚合$filter查询报错:如何正确筛选无指定字段的子文档

解决MongoDB聚合$filter中筛选未删除版本的语法问题

嘿,我明白你遇到的问题了!你写的聚合查询出错,是因为在$filter的cond条件里误用了MongoDB普通查询的语法格式。

在聚合管道的表达式环境中,判断字段是否存在不能像普通find查询那样写{'$$version.delete': {$exists: false}},而是要使用聚合专用的$exists操作符,它的语法是{$exists: [字段路径, 是否存在的布尔值]}。

正确的聚合查询语句

db.getCollection('test').aggregate([
  {$project: {
    versions: {
      $filter: {
        input: '$versions',
        as: 'version',
        cond: {
          $or: [
            {$gte: ['$$version.delete', 3]},
            {$exists: ['$$version.delete', false]} // 这里修正了字段存在性的判断语法
          ]
        }
      }
    }
  }}
])

为什么这样写是对的?

这个查询会正确筛选出versions数组中符合以下任一条件的元素:

  • 存在delete字段,且字段值大于等于指定时间戳(示例中是3)
  • 完全不存在delete字段(即未被标记删除)

内容的提问来源于stack exchange,提问作者kamil herba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:33:44