我有很多账户,每个账户都有一名员工。我想找到每个员工的账户数量。如何使用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'
},
});
答案 0 :(得分:1)
聚合比map reduce更快,以便在简单查询中获得mongodb的结果。我能够用结果完成上面的查询,然后分组,计算mongodb。以下是我后来使用的查询
Order.aggregate({$match: {active: true }},
{$group: {_id:'$employee', numberOfOrders: {$sum:1}}}, function(err, orders) {
res.json(orders);
});
查询分为两部分执行。第一部分是获取所有活跃的结果,然后根据员工的价值对其进行分组,同时获取一个新的字段numberofOrders,这是我们根据员工分组时形成的每个组中的文档数量。