Mongodb更新对象数组

时间:2018-03-15 06:25:38

标签: mongodb

我有一个Mongodb更新对象数组的文档,如下所示:

{
  "_id" : 5,
  "quizzes" : [
     { "wk" : 1, "score" : 10 },
     { "wk" : 2, "score" : 8 },
     { "wk" : 5, "score" : 8 }
  ]
}

我想在测验数组的每个对象中添加新字段。 预期结果应为

{
  "_id" : 5,
  "quizzes" : [
     { "wk" : 1, "score" : 10, "day": 1 },
     { "wk" : 2, "score" : 8, "day": 2 },
     { "wk" : 5, "score" : 8, "day": 3 }
  ]
}

Any solution for this.

1 个答案:

答案 0 :(得分:0)

您可以使用聚合框架:

db.col.aggregate([
    {
        $unwind: {
            path: "$quizzes",
            includeArrayIndex: "quizzes.day"
        }
    },
    {
        $group: {
            _id: "$_id",
            quizzes: { 
                $push: {
                    "score" : "$quizzes.score",
                    "wk" : "$quizzes.wk",
                    "day" : { $add: [ "$quizzes.day", 1 ] }
                }
            }
        }
    },
    {
        $out: "col"
    }
])

要为每个元素分配索引,您可以$unwind使用includeArrayIndex选项。这些索引以0开头,因此我们必须使用$add开始1。然后,您可以使用_id属性进行分组,并使用$out将汇总结果保存到您的收藏中。