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

MongoDB find查询过滤数组nil值后匹配指定长度的实现方法

MongoDB 按排除指定元素后的数组长度匹配文档的find查询方案

以上写法支持MongoDB 3.6及以上版本,为目前主流生产环境的通用兼容方案。


场景1:数组元素直接为"nil"的情况

你之前的写法错误点在于将$size的语法顺序写反,正确逻辑是先用$filter过滤掉"nil"元素,再把过滤后的数组传给$size计算长度,最后和目标长度做等值比较即可,合法写法如下:

db.collection.find({
  $expr: {
    $eq: [
      {
        $size: {
          $filter: {
            input: "$arrayProperty",
            cond: { $ne: [ "$$this", "nil" ] }
          }
        }
      },
      5 // 此处替换为你需要匹配的目标长度
    ]
  }
})

场景2:数组元素为JSON对象、嵌套字段值为"nil"的情况

仅需要修改$filter的判断条件,指定对比数组元素的嵌套字段即可,以你给出的示例数据中排除turbo为"nil"的元素为例,写法如下:

db.collection.find({
  $expr: {
    $eq: [
      {
        $size: {
          $filter: {
            input: "$arrayProperty",
            cond: { $ne: [ "$$this.turbo", "nil" ] }
          }
        }
      },
      2 // 此处替换为你需要匹配的目标长度
    ]
  }
})

上述示例查询会返回你给出的第二条示例数据,该数据过滤后数组有效长度为2,符合匹配规则。


内容的提问来源于stack exchange,提问作者Will H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:45:04