我们假设我的收藏品具有以下结构;
{
id:1,
name: 'name1',
students: ['1', '2' , '3']
}
{
id:2,
name: 'name2',
students: ['11', '22' , '33']
}
...
我希望将所有学生元素放在一个数组中。
我可以这样做:
db.collection.find({}, {students: 1, _id:0})
这会返回一个数组为
result = [
{students: ['1', '2', '3']},
{students: ['11', '22','33']},
]
但我希望得到result = ['1', '2', '3', '11', '22','33'];
获得结果的最有效方法是什么?
答案 0 :(得分:2)
如果您想使用JavaScript方式,请使用Array.prototype.reduce
reduce()
方法对累加器和数组的每个值(从左到右)应用函数以将其减少为单个值。
试试这个:
var result = [{
students: ['1', '2', '3']
}, {
students: ['11', '22', '33']
}, ];
var merged = result.reduce(function(a, b) {
return a.students.concat(b.students);
});
console.log(merged);

答案 1 :(得分:0)
您可以使用aggragation框架:
db.collection.aggregate([{
$unwind: '$students'
},{
$group: {
_id: '1',
students: {
$push: '$students'
}
}
}])
答案 2 :(得分:0)
尝试使用聚合框架。
db.collection.aggregate([
{$project:{_id:0, students:1}},
{$group:{_id:null, result:{$push:"$$ROOT"}}},
{$project:{_id:0, result:1}}
])
这将发出:
{
"result" : [
{
"students" : [
"1",
"2",
"3"
]
},
{
"students" : [
"11",
"22",
"33"
]
}
]
}