可以使用数组的值';mongodb聚合期间表达式中的子文档?
假设我有这个文件:可以使用数组的值';mongodb聚合期间表达式中的子文档?,mongodb,aggregation-framework,Mongodb,Aggregation Framework,假设我有这个文件: { _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]}
{
_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
,但没有效果。您可以使用:
db.collection.aggregate([
{ $addFields: {
a1x2: { $let: {
vars: {
aTmp: {$arrayElemAt: ["$array", 0]}
},
in: {$multiply: ["$$aTmp.a", 2]}
}}
} }
])