我有一个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.
答案 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将汇总结果保存到您的收藏中。