如何从MongoDB集合的数组字段中提取指定位置的嵌套属性值
可以实现,以下是两种常用实现方案
方案1:普通find查询(返回轻度嵌套结构)
直接在投影参数中指定数组下标对应字段,关闭不需要的字段返回即可:
// 下标1对应data数组的第二个元素,_id:0表示不返回默认的_id字段 db.collection.find({}, { "data.1.payload.value": 1, _id: 0 })
返回结果示例:
{ "data" : [ { "payload" : { "value" : -10 } } ] }
方案2:聚合查询(直接返回目标值,无多余嵌套)
如果需要直接拿到扁平化的数值结果,使用聚合管道的数组操作符实现:
MongoDB 4.4及以上版本(使用$getField)
db.collection.aggregate([ { $project: { _id: 0, targetValue: { $getField: { field: "value", input: { $getField: { field: "payload", input: { $arrayElemAt: ["$data", 1] } } } } } } } ])
低版本MongoDB兼容方案(使用$let)
db.collection.aggregate([ { $project: { _id: 0, targetValue: { $let: { vars: { elem: { $arrayElemAt: ["$data", 1] } }, in: "$$elem.payload.value" } } } } ])
以上两种聚合方案返回结果均为:
{ "targetValue" : -10 }
内容的提问来源于stack exchange,提问作者Anoopkr05
相关产品推荐
相关产品推荐

