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

MongoDB中如何获取嵌套数组大小?使用aggregate遇困惑求助

获取MongoDB中Doctor文档Patients数组的大小

嘿,我完全懂嵌套数组在MongoDB聚合操作里确实容易让人犯晕,别担心,这就帮你搞定获取patients数组长度的需求!

首先先假设你的Doctor文档结构大概是这样的(如果实际结构有出入,随时告诉我调整):

{
"_id": ObjectId("60d21b4667d0d8992e610c85"),
"name": "Dr. Emily Clark",
"specialty": "Cardiology",
"patients": [
{"name": "John Doe", "age": 52, "diagnosis": "Hypertension"},
{"name": "Jane Smith", "age": 38, "diagnosis": "Arrhythmia"},
// 更多患者数据
]
}

咱们分两种常见场景来实现:

1. 保留Doctor所有字段,新增数组长度字段

如果你想保留Doctor文档的所有原有信息,同时新增一个字段显示患者总数,用$addFields配合$size操作符最方便——不用手动列出所有字段,直接追加新字段就行:

db.doctors.aggregate([
  {
    $addFields: {
      patientTotal: { $size: "$patients" }
    }
  }
])

这里的$size是MongoDB专门用来获取数组长度的操作符,"$patients"是引用当前文档里的patients数组字段。执行后每个Doctor文档都会多一个patientTotal字段,值就是对应patients数组的元素个数。

2. 只返回患者数量(按需选择字段)

如果不需要保留Doctor的所有字段,只想获取关键信息(比如医生姓名+患者数),可以用$project来指定返回的字段:

db.doctors.aggregate([
  {
    $project: {
      _id: 0, // 不需要_id的话设为0,需要就去掉这行
      doctorName: "$name",
      patientCount: { $size: "$patients" }
    }
  }
])

进阶:统计符合条件的患者数量

要是你需要统计满足特定条件的患者(比如年龄大于40的患者),可以把$filter和$size结合起来用:

db.doctors.aggregate([
  {
    $addFields: {
      adultPatientCount: {
        $size: {
          $filter: {
            input: "$patients",
            cond: { $gt: ["$$this.age", 40] } // 筛选年龄大于40的患者
          }
        }
      }
    }
  }
])

要是你的实际文档结构有特殊嵌套,或者还有其他定制化需求,随时补充细节就行!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:56:25