mongodb:将属性添加到子文档

时间:2016-12-02 00:28:25

标签: mongodb

给定一组用户:

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

1 个答案:

答案 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