标题第一次有点难以理解,所以这是一个例子。我使用mongodb并拥有这样的数据:
id: String
timestamp: String
steps: [{
action: 1,
timestamp: String
}, {
action: 2,
timestamp: String
}, ...
]
我想在每个步骤中添加一个新字段,让我们说bot: false
。
我尝试了更新,如:
{ $set: { 'steps': { 'bot': false } } }
然而,这取代了整个步骤,失去了动作/时间戳。 我也尝试过:
{ $set: { 'steps.bot': false } }
这也没有用,因为步骤是一个数组。
我还查看了$ each修饰符,但它似乎与$ set无关。
有什么想法吗? 感谢
答案 0 :(得分:4)
根据您的问题,我认为您的文档结构如下
{
"_id" : ObjectId("54996f980e64b1a2fcb4824e"),
"id" : "1",
"timestamp" : "Tue, 23 Dec 2014 13:37:33 GMT",
"steps" : [
{
"action" : 1,
"timestamp" : "Tue, 23 Dec 2014 13:37:40 GMT"
},
{
"action" : 2,
"timestamp" : "Tue, 23 Dec 2014 13:37:40GMT"
}
]
}
在上面的文档中,您想要添加像steps.bot:false
这样的新字段,因此您应该使用以下javascript来更新嵌套文档
db.collectionName.find({
"steps":{"$exists":true}}).forEach(function(data){
for(var i=0;i<data.steps.length;i++) {
db.demo.update(
{
"_id": data._id,
"steps.action": data.steps[i].action
},
{
"$set": {
"steps.$.bob":
false
}
},true,true
);
}
})