[英]Possible to use value of an array's subdocument in an expression during mongodb aggregation?
假设我有这个文件:
{
_id: 0,
array: [{a: 120}, {a: 2452}]
}
我想获得:
{
_id: 0,
array: [{a: 120}, {a: 2452}],
a1x2: 240 // array[0].a * 2
}
目前,在聚合中,我能想到的最简单的方法是:
db.collection.aggregate([{
$match: {}
}, {
$set: {aTmp: {$arrayElemAt: ["$array", 0]}}
}, {
$project: {
array: 1,
a1x2: {$multiply: ["$aTmp.a", 2]},
aTmp: 0
}
}
有没有办法在没有设置aTmp
的中间步骤的情况下做到这一点? 当键的形式为{$arrayElemAt: ["$array", 0]}
时,我不知道如何获取键的子文档值。
我也尝试使用$array.0.a
和$array[0].a
,但无济于事。
您可以使用$let :
db.collection.aggregate([
{ $addFields: {
a1x2: { $let: {
vars: {
aTmp: {$arrayElemAt: ["$array", 0]}
},
in: {$multiply: ["$$aTmp.a", 2]}
}}
} }
])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.