2015-01-06 62 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); 
}); 

查詢分兩部分執行。第一部分是獲取所有活動的結果,然後根據員工的價值對其進行分組,然後獲取新的字段編號,這些是根據員工分組時形成的每個組中的文檔數量。