Mongodb - 子文档的聚合和结果的更新

时间:2015-04-05 08:31:35

标签: mongodb mongoose mongodb-query

我有以下问题。我找到并总结了子文档中的每个值 它提供了以下[ { _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,或者如何以其他方式解决?

1 个答案:

答案 0 :(得分:0)

在进行聚合时,MongoDB无法将结果直接写入现有文档。

您有两个选择:

  1. 在应用程序代码中检索结果,然后在第二个查询中更新文档。

  2. 使用$out运算符,将聚合的结果写入新集合。此操作将删除结果集合中的所有文档并插入新文档。 (http://docs.mongodb.org/manual/reference/operator/aggregation/out/