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'}}])代码>(我没有测试它)