2015-01-06 39 views
1

我有很多账号,每个账号都有一名员工。我想找到每个员工的账户数量。我如何使用猫鼬聚合(mongodb)来完成这项任务。我熟悉猫鼬的其他功能,并能用以下代码实现:如何在猫鼬中进行汇总和分组

exports.accountsOfEachEmployee = function(req, res) { 
    Account.find({active:true}).exec(function(err, accounts){ 
    if (err || !accounts) res.status(400).send({ 
     message: 'could not retrieve accounts from database' 
     }); 
    var accountsOfEachEmployee = {}; 
    for (var i = 0; i < accounts.length; i++) { 
     if(accountsOfEachEmployee[order[i].employee]) { 
     accountsOfEachEmployee[order[i].employee] = 1; 
     } else { 
     accountsOfEachEmployee[order[i].employee]++; 
     } 
    } 
    res.json(accountsOfEachEmployee); 
    }); 
}; 

正在使用聚合更快吗?分组和聚合如何在猫鼬中工作(mongodb)。以下是我的账户模式

var AccountSchema = new Schema({ 
    active: { 
    type : Boolean, 
    default: false 
    }, 
    employee: { 
    type: Schema.ObjectId, 
    ref: 'Employee' 
    }, 
}); 

回答

0

聚合速度比map缩短,以便在简单查询中获得mongodb结果。我能够完成上面的查询结果,然后组,mongodb的计数。以下是我稍后使用的查询

Order.aggregate({$match: {active: true }}, 
    {$group: {_id:'$employee', numberOfOrders: {$sum:1}}}, function(err, orders) { 
    res.json(orders); 
}); 

查询分两部分执行。第一部分是获取所有活动的结果,然后根据员工的价值对其进行分组,然后获取新的字段编号,这些是根据员工分组时形成的每个组中的文档数量。