Vous pouvez utiliser:
db.foo.update({}, {$rename:{"name.additional":"name.last"}}, false, true);
Ou pour simplement mettre à jour les documents qui contiennent la propriété:
db.foo.update({"name.additional": {$exists: true}}, {$rename:{"name.additional":"name.last"}}, false, true);
Le false, true
dessus dans le procédé sont les suivants : { upsert:false, multi:true }
. Vous devez multi:true
mettre à jour tous vos enregistrements.
Ou vous pouvez utiliser l'ancienne méthode:
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);
Dans MongoDB 3.2, vous pouvez également utiliser
db.students.updateMany( {}, { $rename: { "oldname": "newname" } } )
La syntaxe générale de ceci est
db.collection.updateMany(filter, update, options)
https://docs.mongodb.com/manual/reference/method/db.collection.updateMany/
false, true
dans laupdate
méthode de la$rename
version sont:{ upsert:false, multi:true }
. Vous devezmulti:true
mettre à jour tous vos enregistrements.upsert:true
créera un nom de champ si le nom de champ n'existe pas, par défaut àfalse
."table.field" : "table.field"
syntaxe. Cela a fonctionné lorsque je viens d'utiliser la"field" : "field"
syntaxe.name.last
ne l'est pastable.field
. Si vous lisez la question, vous pouvez voir que lename
champ contient un objet.db.foo.update({}, {$rename:{"name.0.additional":"name.0.last"}}, false, true)
:?s'il vous plaît essayez
db.collectionName.update({}, { $rename : { 'name.additional' : 'name.last' } }, { multi: true } )
et lisez ceci :) http://docs.mongodb.org/manual/reference/operator/rename/#_S_rename
la source
upsert
etmulti
.Si jamais vous devez faire la même chose avec mongoid:
METTRE À JOUR
Il y a un changement dans la syntaxe dans
monogoid 4.0.0
:la source
Model.all.rename(old_field: :new_field)
N'importe qui pourrait potentiellement utiliser cette commande pour renommer un champ de la collection (en n'utilisant aucun _id):
voir FYI
la source
Ce code nodejs fait juste cela, comme @Felix Yan a mentionné que l'ancienne méthode semble fonctionner très bien, j'ai eu quelques problèmes avec d'autres snipets, espérons que cela aidera.
Cela renommera la colonne "oldColumnName" en "newColumnName" de la table "documents"
la source
J'utilise Mongo 3.4.0
L'opérateur $ rename met à jour le nom d'un champ et a la forme suivante:
par exemple
Le nouveau nom de champ doit être différent du nom de champ existant. Pour spécifier un dans un document incorporé, utilisez la notation par points.
Cette opération renomme le champ nmae à nommer pour tous les documents de la collection:
Dans la méthode ci-dessus false, true sont: {upsert: false, multi: true}. Pour mettre à jour tous vos enregistrements, vous avez besoin du multi: true.
Renommer un champ dans un document incorporé
utilisez le lien: https://docs.mongodb.com/manual/reference/operator/update/rename/
la source
Si vous utilisez MongoMapper, cela fonctionne:
la source