我有这个对象,我想更新集合中所有文档的名称字段“field”。我阅读了mongodb文档,并说$rename
在这种情况下不起作用。我应该执行forEach但我不知道使用哪个命令
{
"name": "foo"
"array": [
"object": {
"field": "name"
}
]
}
答案 0 :(得分:2)
手动执行:
db.collection.find().forEach(function(doc) {
if (doc.array) {
doc.array.forEach(function(edoc) {
if (edoc.object) {
doc.object.new_field = edoc.object.field
delete edoc.object.field
}
})
db.test.update({ "_id" : doc._id }, doc)
}
})
这应该让你开始。它处理缺少或空array
个数组,但不处理错误类型的array
值或错误类型的object
值。
答案 1 :(得分:-2)
$ rename modifier for update Ops应该有效(http://docs.mongodb.org/manual/reference/operator/update/rename/)
想象一下像你这样的系列:
{
"name": "foo",
"array":[
{"field": "name" }
]
}
您将能够做到这样的事情:
db.rename.update({},{$rename:{"name":"newName"}});
文件如下: { “newName”:“foo”, “阵列”:[ {“field”:“name”} ] }
为了更新所有集合,您应该使用multi选项,如下所示:
db.rename.update({},{$rename:{"name":"newName"}}, {multi:true})
此致