Você pode usar:
db.foo.update({}, {$rename:{"name.additional":"name.last"}}, false, true);
Ou apenas atualize os documentos que contêm a propriedade:
db.foo.update({"name.additional": {$exists: true}}, {$rename:{"name.additional":"name.last"}}, false, true);
A false, true
no método acima são os seguintes: { upsert:false, multi:true }
. Você precisa multi:true
atualizar todos os seus registros.
Ou você pode usar da maneira anterior:
remap = function (x) {
if (x.additional){
db.foo.update({_id:x._id}, {$set:{"name.last":x.name.additional}, $unset:{"name.additional":1}});
}
}
db.foo.find().forEach(remap);
No MongoDB 3.2, você também pode usar
db.students.updateMany( {}, { $rename: { "oldname": "newname" } } )
A sintaxe geral disso é
db.collection.updateMany(filter, update, options)
https://docs.mongodb.com/manual/reference/method/db.collection.updateMany/
false, true
noupdate
método da$rename
versão são:{ upsert:false, multi:true }
. Você precisamulti:true
atualizar todos os seus registros.upsert:true
criará o nome do campo se o nome do campo não existir, o padrão seráfalse
."table.field" : "table.field"
sintaxe. Funcionou quando eu apenas usei a"field" : "field"
sintaxe.name.last
não étable.field
. Se você ler a pergunta, poderá ver que oname
campo contém um objeto.db.foo.update({}, {$rename:{"name.0.additional":"name.0.last"}}, false, true)
:?tente por favor
db.collectionName.update({}, { $rename : { 'name.additional' : 'name.last' } }, { multi: true } )
e leia isto :) http://docs.mongodb.org/manual/reference/operator/rename/#_S_rename
fonte
upsert
emulti
.Se alguma vez você precisar fazer a mesma coisa com o mongoid:
ATUALIZAR
Há alterações na sintaxe em
monogoid 4.0.0
:fonte
Model.all.rename(old_field: :new_field)
Qualquer pessoa poderia usar esse comando para renomear um campo da coleção (não usando _id):
veja FYI
fonte
Este código nodejs apenas faz isso, como o @Felix Yan mencionou o modo antigo parece funcionar muito bem, eu tive alguns problemas com outros snipets, espero que isso ajude.
Isso renomeará a coluna "oldColumnName" como "newColumnName" da tabela "documentos"
fonte
Eu estou usando, Mongo 3.4.0
O operador $ rename atualiza o nome de um campo e tem o seguinte formato:
por exemplo
O novo nome do campo deve ser diferente do nome do campo existente. Para especificar a em um documento incorporado, use a notação de ponto.
Esta operação renomeia o campo nmae para nomear todos os documentos da coleção:
No método acima false, true são: {upsert: false, multi: true}. Para atualizar todos os seus registros, você precisa do multi: true.
Renomear um campo em um documento incorporado
use o link: https://docs.mongodb.com/manual/reference/operator/update/rename/
fonte
Se você estiver usando o MongoMapper, isso funcionará:
fonte