Puedes usar:
db.foo.update({}, {$rename:{"name.additional":"name.last"}}, false, true);
O simplemente para actualizar los documentos que contienen la propiedad:
db.foo.update({"name.additional": {$exists: true}}, {$rename:{"name.additional":"name.last"}}, false, true);
El false, true
en el método anterior son: { upsert:false, multi:true }
. Necesita multi:true
actualizar todos sus registros.
O puede usar la forma 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);
En MongoDB 3.2 también puedes usar
db.students.updateMany( {}, { $rename: { "oldname": "newname" } } )
La sintaxis general de esto es
db.collection.updateMany(filter, update, options)
https://docs.mongodb.com/manual/reference/method/db.collection.updateMany/
false, true
en elupdate
método de la$rename
versión son:{ upsert:false, multi:true }
. Necesitamulti:true
actualizar todos sus registros.upsert:true
creará el nombre del campo si el nombre del campo no existe, por defecto esfalse
."table.field" : "table.field"
sintaxis. Funcionó cuando acabo de usar la"field" : "field"
sintaxis.name.last
no lo estable.field
. Si lees la pregunta, puedes ver que elname
campo contiene un objeto.db.foo.update({}, {$rename:{"name.0.additional":"name.0.last"}}, false, true)
?por favor, inténtalo
db.collectionName.update({}, { $rename : { 'name.additional' : 'name.last' } }, { multi: true } )
y lee esto :) http://docs.mongodb.org/manual/reference/operator/rename/#_S_rename
fuente
upsert
ymulti
.Si alguna vez necesitas hacer lo mismo con mongoid:
ACTUALIZAR
Hay un cambio en la sintaxis en
monogoid 4.0.0
:fuente
Model.all.rename(old_field: :new_field)
Cualquiera podría usar este comando para cambiar el nombre de un campo de la colección (al no usar ningún _id):
ver FYI
fuente
Este código de nodejs solo hace eso, como @Felix Yan mencionó que la forma anterior parece funcionar bien, tuve algunos problemas con otros fragmentos, espero que esto ayude.
Esto cambiará el nombre de la columna "oldColumnName" por "newColumnName" de la tabla "documentos"
fuente
Estoy usando Mongo 3.4.0
El operador $ rename actualiza el nombre de un campo y tiene la siguiente forma:
por ej.
El nuevo nombre de campo debe diferir del nombre de campo existente. Para especificar un en un documento incrustado, use la notación de puntos.
Esta operación cambia el nombre del campo nmae para nombrar todos los documentos de la colección:
En el método anterior, falso, verdadero son: {upsert: falso, multi: verdadero}. Para actualizar todos sus registros, necesita el multi: verdadero.
Cambiar el nombre de un campo en un documento incrustado
utilice el enlace: https://docs.mongodb.com/manual/reference/operator/update/rename/
fuente
Si está utilizando MongoMapper, esto funciona:
fuente