在MongoDB聚合中连接两个阵列?
聚合产生了两个数组:在MongoDB聚合中连接两个阵列?,mongodb,Mongodb,聚合产生了两个数组:$array1和$array2: $array1 = [{ key1_1: 0, key1_2: 1, key1_3: 2 }, { key1_1: 0, key1_2: 1, key1_3: 2 }] $array2 = [{ k
$array1
和$array2
:
$array1 = [{ key1_1: 0,
key1_2: 1,
key1_3: 2
},
{ key1_1: 0,
key1_2: 1,
key1_3: 2
}]
$array2 = [{ key2_1: 0,
key2_2: 1
},
{ key2_1: 0,
key2_2: 1
}]
我想完全加入他们
如果我这样做:
{ $project: { 'output': { $concatArrays: [ '$array1', '$array2' ] } }
结果将是:
output: [{ key1_1: 0,
key1_2: 1,
key1_3: 2
},
{ key2_1: 0,
key2_2: 1
},
{ key1_1: 0,
key1_2: 1,
key1_3: 2
},
{ key2_1: 0,
key2_2: 1
}]
鉴于我更愿意:
output: [{ key1_1: 0,
key1_2: 1,
key1_3: 2,
key2_1: 0,
key2_2: 1
},
{ key1_1: 0,
key1_2: 1,
key1_3: 2,
key2_1: 0,
key2_2: 1
}]
我想这只有通过
$project
才能实现,但如何才能使聚合变得更容易呢
> var a =[];
> var array1 = [{ key1_1: 0, key1_2: 1, key1_3: 2 }, { key1_1: 0, key1_2: 1, key1_3: 2 }];
> var array2 = [{ key2_1: 0, key2_2: 1 }, { key2_1: 0, key2_2: 1 }];
> array1.forEach(function(o,i){a.push(Object.assign(array1[i],array2[i]));});
> printjson(a);
[
{
"key1_1" : 0,
"key1_2" : 1,
"key1_3" : 2,
"key2_1" : 0,
"key2_2" : 1
},
{
"key1_1" : 0,
"key1_2" : 1,
"key1_3" : 2,
"key2_1" : 0,
"key2_2" : 1
}
]
这里有一个解决方案,这并不完全是我想要的,但它已经足够好了 在聚合中,首先
{ $unwind: '$array1' },
{ $unwind: '$array2' },
然后进行分组:
{ $group: { _id: '$_id',
arrays: { $push: {
array1: '$array1',
array2: '$array2'
}
}
}
},
结果将是:
"arrays": {[
"array1": {
...
},
"array2": {
...
}
]}
加入阵列没有问题。但是你正在尝试连接对象-将所有对象的字段复制到一个对象中有没有简单的方法?我注意到正在使用的键是重复的。请指定一份合适的样品文件好吗?如果您能提供诸如数组对象中的字段数、数组中的对象数等详细信息,这将是非常有用的。是的,它是,但它不是MongoDB解决方案。但显然没有比这更好的了,所以我会解决的。