在聚合时,我遇到以下情况:在某些时候,我的文档在根级别包含一组对象和一个相同长度的数组。一个例子是:
{_id:0,
cars:[{name:"vw polo",door:3},{name:"vw golf",door:5}],
possible_colors:[["black","blue"],["white"]]}
我现在要尝试的是将可能的颜色更新投影到cars数组的每个对象中。预期结果应如下所示。
{_id:0,
cars:[{name:"vw polo",door:3,possible_colors:["black","blue"]},
{name:"vw golf",door:5,possible_colors:["white"]}],
}
我已经尝试过{$addfields:{cars:{$zip:[$cars,$possible_colors]}}}
,但是这会创建一个数组列表,其中每个数组都包含对象和正确的子数组,但是我无法合并它们。
答案 0 :(得分:2)
$zip
运算符是一种很好的方法,但是您需要与$map一起使用其他$mergeObjects才能获得所需的结构:
db.collection.aggregate([
{
$addFields: {
cars: {
$map: {
input: { $zip: { inputs: [ "$cars", "$possible_colors" ] } },
in: {
$mergeObjects: [
{ $arrayElemAt: [ "$$this", 0 ] },
{ possible_colors: { $arrayElemAt: [ "$$this", 1 ] } }
]
}
}
}
}
}
])