获取一个数组mongodb + node.js中的所有数组元素

时间:2016-03-28 11:52:06

标签: javascript node.js mongodb

我们假设我的收藏品具有以下结构;

{
  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'];

获得结果的最有效方法是什么?

3 个答案:

答案 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"
            ]
        }
    ]
}