数据结构是,需求
Demand中有个sbu字段ref指向业务
Sbu。而我要做的是在获取到业务列表的同时获取到每个业务下需求的数量。
直接上代码
db.Demand.aggregate([
{ $group: { _id: '$sbu', count: {$sum: 1} } }
], function(err, result) {
db.Sbu.populate(result, {path: '_id'}, function(err, result) {
console.log(err, result);
});
});
result如下
[
{
_id: { name: '测试二', _id: 575d2f6f746542c169d12e9b },
count: 1
},
{
_id: { name: '测试', _id: 575d2f6f746542c169d12e9b },
count: 8
},
]
而我希望得到
[
{
name: '测试二',
_id: 575d2f6f746542c169d12e9b,
count: 1
},
{
name: '测试',
_id: 575d2f6f746542c169d12e9b,
count: 8
},
]
有否不用上面那样两次query而获取到我希望的数据形式的方法吗?
db.Demand
.aggregate()
.group( { _id: '$sbu', count: {$sum: 1} } )
.lookup( { from: 'sbus', localField:'_id', foreignField:'_id', as:'_id' } )
.exec(function(err, result) {
console.log(err, result)
});
这个可以实现一次Query了,但还差数据的形式~
=====
更新:
用 Object.assign
处理一下就好啦