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

如何在MongoDB聚合$project中获取数组嵌套对象的Amount和Price字段

在MongoDB聚合的$project阶段提取数组嵌套对象的指定字段

根据你的需求,这里提供几种不同场景的实现方式:

1. 保留数组结构,仅保留每个对象中的Amount和Price字段

如果你希望维持SlsIvcDtls的数组格式,但每个元素只包含目标字段,可以使用$map操作符转换数组元素:

db.collection.aggregate([
  {
    $project: {
      // 保留其他需要的字段,1表示保留,0表示排除
      otherFields: 1,
      SlsIvcDtls: {
        $map: {
          input: "$SlsIvcDtls",
          as: "detail",
          in: {
            Amount: "$$detail.Amount",
            Price: "$$detail.Price"
          }
        }
      }
    }
  }
])

2. 将Amount和Price提取为独立的顶层数组

如果需要把所有元素的Amount和Price分别提取成两个单独的数组:

db.collection.aggregate([
  {
    $project: {
      otherFields: 1,
      allAmounts: "$SlsIvcDtls.Amount",
      allPrices: "$SlsIvcDtls.Price"
    }
  }
])

执行后会生成allAmounts和allPrices两个数组,分别存储所有SlsIvcDtls元素的对应值。

3. 提取数组第一个元素的Amount和Price为顶层字段

如果SlsIvcDtls数组通常只有一个元素,可直接将这两个字段提取为文档的顶层字段:

db.collection.aggregate([
  {
    $project: {
      otherFields: 1,
      Amount: { $arrayElemAt: ["$SlsIvcDtls.Amount", 0] },
      Price: { $arrayElemAt: ["$SlsIvcDtls.Price", 0] }
    }
  }
])

这里$arrayElemAt用于获取数组指定索引的元素,索引0表示第一个元素。

内容的提问来源于stack exchange,提问作者Quantum-script

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:26:55