Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取一个数组mongodb+;node.js_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript 获取一个数组mongodb+;node.js

Javascript 获取一个数组mongodb+;node.js,javascript,node.js,mongodb,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: [

假设我有一个集合,它具有以下结构:

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


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

您可以使用加积框架:

db.collection.aggregate([{
    $unwind: '$students'
},{
    $group: {
        _id: '1',
        students: {
            $push: '$students'
        }
    }
}])

您可以使用加积框架:

db.collection.aggregate([{
    $unwind: '$students'
},{
    $group: {
        _id: '1',
        students: {
            $push: '$students'
        }
    }
}])

如果您想使用JavaScript,请使用

reduce()
方法对累加器和数组的每个值(从左到右)应用一个函数,将其减少为单个值

试试这个:

var结果=[{
学生:['1','2','3']
}, {
学生:['11','22','33']
}, ];
var合并=结果.减少(函数(a,b){
返回a.students.concat(b.students);
});

console.log(合并)如果您想使用JavaScript,请使用

reduce()
方法对累加器和数组的每个值(从左到右)应用一个函数,将其减少为单个值

试试这个:

var结果=[{
学生:['1','2','3']
}, {
学生:['11','22','33']
}, ];
var合并=结果.减少(函数(a,b){
返回a.students.concat(b.students);
});

console.log(合并)尝试使用聚合框架

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

尝试使用聚合框架

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

var merged=result.reduce(函数(a,b){返回a.students.concat(b.students);})
@RayonDabre上述评论完全可以作为答案。@Reddy,我猜OP正在寻找一些传统的
mongo方法来获得预期的结果。..oh!!可能是。但是他仍然有JavaScript标签。。所以你可以继续回答。我没有看到任何问题尝试这个
db.collection.aggregate([{$group:{$push:{$each:'$students'}}])
(我没有测试它)
var merged=result.reduce(函数(a,b){返回a.students.concat(b.students);})
@RayonDabre上述评论完全可以作为答案。@Reddy,我猜OP正在寻找一些传统的
mongo方法来获得预期的结果。..oh!!可能是。但是他仍然有JavaScript标签。。所以你可以继续回答。我没有看到任何问题尝试这个
db.collection.aggregate([{$group:{$push:{$each:'$students'}}])(我没有测试它)