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

MongoDB多条件统计深层嵌套数组_a[]._p[]元素数量

MongoDB多层嵌套数组符合条件的_p元素统计方案

需要统计MongoDB中满足以下任一条件的所有_a[]._p[]元素数量:

  • 条件1:_a[]._p[].s.d.t[].dateP以2022开头,且_a[]._p[].s.d.t[].tF="N"
  • 条件2:_a[]._p[].s.c.t[].dateP以2022开头,且_a[]._p[].s.c.t[].tF="N"

示例文档

{
  "_id": ObjectId("5c05984246a0201286d4b57a"),
  "f": "x",
  "_a": [
    {
      "_p": [
        {
          "pid": 2,
          "s": {
            "d": {
              "t": [
                { "id": 1, "dateP": "20200-09-20" },
                { "id": 2, "dateP": "2022-09-20", "tF": "N" }
              ]
            },
            "c": {
              "t": [
                { "id": 3, "dateP": "20300-09-22" },
                { "id": 4, "dateP": "2022-09-23", "tF": "N" }
              ]
            }
          }
        }
      ]
    }
  ]
}

当前尝试的问题

使用db.collection.count({ "_a._p.s.c.t":{ $elemMatch:{ tF:"N" , dateP: /^2022/i } } })只能统计包含匹配条件的文档数量,无法精准统计嵌套数组中符合条件的_p元素个数,也无法同时覆盖两个条件的匹配。

正确的聚合查询方案

要实现精准统计,需要通过聚合框架逐层展开嵌套数组,再筛选计数:

db.collection.aggregate([
  // 展开_a数组,将每个_a元素转为独立文档
  { $unwind: "$_a" },
  // 展开_a下的_p数组,将每个_p元素转为独立文档
  { $unwind: "$_a._p" },
  // 筛选满足任一条件的_p元素
  {
    $match: {
      $or: [
        {
          "_a._p.s.d.t": {
            $elemMatch: {
              dateP: /^2022/,
              tF: "N"
            }
          }
        },
        {
          "_a._p.s.c.t": {
            $elemMatch: {
              dateP: /^2022/,
              tF: "N"
            }
          }
        }
      ]
    }
  },
  // 统计符合条件的_p元素总数
  {
    $group: {
      _id: null,
      total: { $sum: 1 }
    }
  },
  // 调整输出格式,隐藏_id字段
  {
    $project: {
      _id: 0,
      total: 1
    }
  }
])

查询说明

  1. $unwind阶段:逐层展开_a和_p嵌套数组,将原本的嵌套结构拆分为单条文档,确保每个_p元素都能被单独处理。
  2. $match阶段:通过$or组合两个条件,筛选出满足任一条件的_p元素对应的文档。
  3. $group阶段:按null分组,对筛选后的文档进行计数,得到符合条件的_p元素总数。
  4. $project阶段:调整输出格式,只保留total字段,符合期望的输出样式。

执行结果

针对示例文档执行上述聚合查询后,会得到如下结果:

{ "total" : 1 }

示例中的_p元素同时满足两个条件,但统计的是_p元素的数量,因此结果为1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:00:34