我有这个对象,我想更新集合中所有文档的名称字段“field”。我读了mongodb文档,它说$rename
在这种情况下不起作用。我应该执行一个foreach,但我不知道如何哪个命令使用如何更新嵌套在MongoDB数组中的名称字段
{
"name": "foo"
"array": [
"object": {
"field": "name"
}
]
}
我有这个对象,我想更新集合中所有文档的名称字段“field”。我读了mongodb文档,它说$rename
在这种情况下不起作用。我应该执行一个foreach,但我不知道如何哪个命令使用如何更新嵌套在MongoDB数组中的名称字段
{
"name": "foo"
"array": [
"object": {
"field": "name"
}
]
}
手工进行:
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
值。
$用于更新行动命名修改应该工作(http://docs.mongodb.org/manual/reference/operator/update/rename/)
想像你们这样一个集合:
{
"name": "foo",
"array":[
{"field": "name" }
]
}
你将能够做到这样的事情:
db.rename.update({},{$rename:{"name":"newName"}});
而doc ument将作如下安排: { “了newName”: “富”, “数组”: { “场”: “名”} ] }
为了更新所有收集你应该使用多选项,如下所示:
db.rename.update({},{$rename:{"name":"newName"}}, {multi:true})
问候