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

如何在MongoDB中查询嵌套文档并返回精确匹配的嵌套字段

问题原因

你使用的普通find查询只能筛选出至少包含1个status为suspended的accounts嵌套文档的父级leads文档,默认会返回完整的accounts数组,不会过滤数组内不符合条件的元素。

解决方案

方案1:返回所有匹配的嵌套accounts文档

如果需要返回一个父文档下所有status为suspended的accounts元素,使用聚合管道实现:

db.getCollection('leads').aggregate([
  // 筛选符合条件的父文档
  { $match: { "accounts.status": "suspended" } },
  // 过滤accounts数组,仅保留匹配项
  {
    $project: {
      // 不需要返回_id的话可添加 _id: 0
      accounts: {
        $filter: {
          input: "$accounts",
          as: "account",
          cond: { $eq: ["$$account.status", "suspended"] }
        }
      }
      // 这里可以追加其他需要返回的父级字段,比如 name: 1 之类的
    }
  }
])

方案2:仅返回第一个匹配的嵌套accounts文档

如果只需取数组里第一个符合条件的元素,可以直接用find的$elemMatch投影:

db.getCollection('leads').find(
  { "accounts.status": "suspended" },
  { accounts: { $elemMatch: { status: "suspended" } } }
)

注意:该方案如果遇到一个父文档下有多个符合条件的accounts元素时,只会返回第一个匹配结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:54:08