2017-07-24 81 views
0

我以mongoDB开始,我想更新我的文档中的嵌套数组以添加一些初始值,但是我找不到使用mong的方法。MongoDB:在每个数组元素中添加字段

这里是我的文档:

{ 
"_id":"cTZDL7WThChSvsvBT", 
"name":"abc", 
"players":[ 
    { 
    "playerName":"Name1" 
    }, 
    { 
    "playerName":"Name2" 
    } 
] 
} 

我想做的事:

{ 
"_id":"cTZDL7WThChSvsvBT", 
"name":"abc", 
"players":[ 
    { 
    "playerName":"Name1", 
    "NewField1":0, 
    "NewField2":0 
    }, 
    { 
    "playerName":"Name2", 
    "NewField1":0, 
    "NewField2":0 
    } 
] 
} 

没有人有这种情况的解决方案?

回答

0

考虑到你想更新一个对象也是,

这个怎么样?

db.collections.updateOne({_id: "cTZDL7WThChSvsvBT"}, {$set: {"players.0.NewField1": 0, "players.0.NewField2: 0}}); 
+0

为先“玩家”运作良好,但只。我不知道数组的大小,我需要将值添加到每个数组中。 – Etienne

+0

我认为多数民众赞成在这种情况下,https://stackoverflow.com/questions/4669178/how-to-update-multiple-array-elements-in-mongodb –

0

这增加了新的领域至player阵列...

db.collection.update({_id: 'cTZDL7WThChSvsvBT', players: {$exists: true}}, {$set: {'players.$.NewFieldOne': 0, 'players.$.NewFieldTwo': 0}}) 

...但由于蒙戈你是will only update the first element of an array which matches the query有点塞。当然,您可以通过使用位置运算符(如在我的示例中)或通过选择特定元素(如前面的海报提示)来选择更新哪个数组元素,但直到Mongo支持所有元素上的“数组更新”,我认为您留下了一个解决方案,如:找到相关文件,然后更新每一个(即客户端更新解决方案)。

+0

感谢您的解决方案,工程!也感谢背景解释。 – Etienne

0

我终于找到了一个方式,通过这样的JS直接编辑文件:

db.doc.find({_id: myDocId}).forEach(function (channel) { 
    channel.players.forEach(function (player) { 
     player.newField1 = 0; 
     player.newField2 = 0; 

    }); 
    db.doc.update({_id: myDocId}, channel); 
    }); 
相关问题