如何聚合和分组猫鼬

时间:2015-01-06 18:01:35

标签: node.js mongodb mongoose

我有很多账户,每个账户都有一名员工。我想找到每个员工的账户数量。如何使用mongoose(mongodb)的聚合来完成此任务。我熟悉mongoose的其他功能,并且能够使用以下代码实现

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);
  }); 
};

使用聚合更快?分组和聚合如何在mongoose(mongodb)中工作。以下是我的帐户架构

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

1 个答案:

答案 0 :(得分:1)

聚合比map reduce更快,以便在简单查询中获得mongodb的结果。我能够用结果完成上面的查询,然后分组,计算mongodb。以下是我后来使用的查询

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

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