给定一组用户:
db.users.insertMany(
[
{
_id: 1,
name: "sue",
points: [
{ points: 85, bonus: 20 },
{ points: 85, bonus: 10 }
]
},
{
_id: 2,
name: "bob",
points: [
{ points: 85, bonus: 20 },
{ points: 64, bonus: 12 }
]
}]);
如何在每个bonus_raw
中添加属性points
,并使用bonus
值的副本?我试过了:
db.getCollection('users').update({ },
{$set:{ 'points.$.bonus_raw' : 'points.$.bonus' }}, false, true)
但我明白了:
位置操作员未找到查询所需的匹配项。未更新的更新:积分。$。bonus_raw
答案 0 :(得分:1)
目前在MongoDB中无法更新数组中的多个项目。
要完成此操作,您必须查询文档,遍历所有嵌套文档,然后将其保存回MongoDB。
在您的情况下,这可以提供帮助: -
db.users.find({points: { $exists: true } }).forEach(function (doc){
doc.points.forEach(function (points) {
points.bonus_raw = points.bonus;
});
db.users.save(doc)
});
此外,在以这种方式进行更新时,请注意竞争条件。 See this