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

如何统计数组字段不含指定键值且包含null值的总行数

统计数组类型字段符合条件行数的实现方案

核心统计规则:

  • 字段值为null的行直接纳入符合条件的计数
  • 字段为数组类型时,数组内所有元素的name键值都不等于'test'的行纳入计数
  • 数组中只要存在任意一个元素的name值为'test',该行就排除

MongoDB 查询实现

直接使用$not搭配$elemMatch操作符编写统计查询即可,该写法天然兼容null值的匹配逻辑,不需要额外单独添加null值判断条件:

db.目标集合名.countDocuments({
  names: {
    $not: {
      $elemMatch: {
        name: "test"
      }
    }
  }
})

逻辑说明:
$elemMatch的作用是匹配数组中至少一个元素满足指定条件,外层包裹$not即对匹配结果取反,筛选出找不到任何数组元素满足name等于test的记录,覆盖两类符合要求的场景:一是字段值为null、不存在可遍历的数组结构;二是数组内所有元素的name值都不等于test,完全匹配统计规则。

原生JavaScript 本地统计

如果是已经拉取到完整结构化数据,在前端/Node.js环境做本地统计,可以参考如下写法:

// 假设rawList为查询到的所有行数据组成的数组
const validCount = rawList.filter(row => {
  if (row.names === null) return true
  return !row.names.some(item => item.name === 'test')
}).length

结果验证

对照提供的测试数据逐一校验匹配规则:

names是否计入统计说明
null是字段值为null符合规则
null是字段值为null符合规则
[{name:'test'},{name:'test1'}]否存在name为test的数组元素
[{name:'test'},{name:'test1'}]否存在name为test的数组元素
[{name:'test1'},{name:'test2'}]是数组内无name为test的元素

最终统计结果为3,和预期结果完全一致。

内容的提问来源于stack exchange,提问作者Darshan Sachaniya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:42:13