2014-09-03 2 views
1

У меня есть этот объект, и я бы хотел обновить поле поля имени всего документа в коллекциях. Я прочитал документацию mongodb, и он говорит, что $rename не работает в этом случае. Я должен выполнить Foreach, но я не знаю, как какую команду использоватьКак обновить поле имен, вложенное в массив в mongodb

{ 
    "name": "foo" 
    "array": [ 
    "object": { 
    "field": "name" 
    } 
    ] 
} 

ответ

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 неправильного типа.

-2

$ переименовывать модификатор для обновления Ops должен работать (http://docs.mongodb.org/manual/reference/operator/update/rename/)

Представьте, как ваша коллекция:

{ 
    "name": "foo", 
    "array":[ 
     {"field": "name" } 
    ] 
} 

Вы сможете сделать что-то вроде этого:

db.rename.update({},{$rename:{"name":"newName"}}); 

И документ ument будет выглядеть следующим образом: { "NEWNAME": "Foo", "массив": [ { "поле": "имя"} ] }

Для того, чтобы обновить все коллекции Вам необходимо использовать многофункциональный вариант следующим образом:

db.rename.update({},{$rename:{"name":"newName"}}, {multi:true}) 

с уважением

Смежные вопросы