我有以下问题。我找到并总结了子文档中的每个值
它提供了以下[ { _id: 551fb140e4b04589d8997213, sumOfpeople: 342 } ]
我想取sumOfpeople
并将其插入同一个房子(相同的req.params.house_id)
House.aggregate([
{ $match: {
id: req.params.house_id
}},
{ $unwind: '$people' }, // unwind creates a doc for every array element
{ $group: {
_id: '$_id',
sumOfpeople: { $sum: '$people.nr'}
}}
], function (err, result) {
if (err) {
console.log(err);
return;
}
console.log(result);
});
这是我希望在聚合后插入结果的模型。
module.exports = mongoose.model('House', {
id: String,
people: [{
id: String,
nr: Number
}],
sumOfpeople: Number //this is the field that I want to update after the aggregation
});
我试图使用$ set:{sumOfpeople:{$ sum:'$ people.nr'}}。 是否可以在聚合中使用$ set,或者如何以其他方式解决?
答案 0 :(得分:0)
在进行聚合时,MongoDB无法将结果直接写入现有文档。
您有两个选择:
在应用程序代码中检索结果,然后在第二个查询中更新文档。
使用$out
运算符,将聚合的结果写入新集合。此操作将删除结果集合中的所有文档并插入新文档。 (http://docs.mongodb.org/manual/reference/operator/aggregation/out/)