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

MongoDB嵌入式文档统计:查询含params="abc"的文档数量

MongoDB动态键嵌入式文档的统计方案

解决思路

由于actions下的子键名不固定、数量不确定,没法直接指定键名查询,核心办法是先把这个动态键的对象转换成数组格式,再遍历数组里的所有任务条目,判断是否存在params="abc"的情况。

具体实现

方式一:用聚合管道统计总数

通过聚合操作一步步处理,先匹配符合条件的文档,再统计数量:

db.collection.aggregate([
  {
    $match: {
      $expr: {
        $anyElementTrue: {
          $map: {
            input: { $objectToArray: "$actions" },
            as: "actionItem",
            in: {
              $anyElementTrue: {
                $map: {
                  input: "$$actionItem.v",
                  as: "task",
                  in: { $eq: ["$$task.params", "abc"] }
                }
              }
            }
          }
        }
      }
    }
  },
  { $count: "符合条件的文档总数" }
])

方式二:直接用countDocuments快速统计

如果不需要复杂的聚合操作,直接用countDocuments配合表达式查询更简洁:

db.collection.countDocuments({
  $expr: {
    $anyElementTrue: {
      $map: {
        input: { $objectToArray: "$actions" },
        as: "entry",
        in: {
          $anyElementTrue: {
            $map: {
              input: "$$entry.v",
              as: "task",
              in: { $eq: ["$$task.params", "abc"] }
            }
          }
        }
      }
    }
  }
})

关键步骤说明

  • $objectToArray: "$actions":把actions这个键名不固定的对象转成[{k: "动态键名", v: 对应任务数组}]的数组结构,这样就能遍历所有动态键。
  • 两层$map:外层遍历每个动态键对应的任务数组,内层遍历数组里的每个任务,判断该任务的params是否等于abc。
  • $anyElementTrue:只要有任意一个任务满足params="abc",就判定整个文档符合统计条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:12:46