如何在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
相关产品推荐
相关产品推荐

