268 votes

Comment puis-je renommer un champ pour tous les documents dans MongoDB ?

Supposons que j'ai une collection dans MongoDB avec 5000 enregistrements, chacun contenant quelque chose de similaire à :

{
"occupation":"Doctor",
"name": {
   "first":"Jimmy",
   "additional":"Smith"
}

Existe-t-il un moyen simple de renommer le champ "additional" en "last" dans tous les documents ? J'ai vu le $rename dans la documentation, mais je ne sais pas vraiment comment spécifier une sous-zone.

0voto

Swapnil Shirke Points 575

J'utilise , Mongo 3.4.0

L'opérateur $rename met à jour le nom d'un champ et a la forme suivante :

{$rename: { <field1>: <newName1>, <field2>: <newName2>, ... } }

par exemple

db.getCollection('user').update( { _id: 1 }, { $rename: { 'fname': 'FirstName', 'lname': 'LastName' } } )

Le nouveau nom du champ doit être différent du nom du champ existant. Pour spécifier un dans un document incorporé, utilisez la notation par points.

Cette opération renomme le champ nmae en nom pour tous les documents de la collection :

db.getCollection('user').updateMany( {}, { $rename: { "add": "Address" } } )

db.getCollection('user').update({}, {$rename:{"name.first":"name.FirstName"}}, false, true);

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é

db.getCollection('user').update( { _id: 1 }, { $rename: { "name.first": "name.fname" } } )

utiliser le lien : https://docs.mongodb.com/manual/reference/operator/update/rename/

0 votes

L'option d'incorporation ne fonctionne pas... J'obtiens cette erreur "ne peut pas utiliser la partie (adresse de address.city) pour traverser l'élément".

0voto

Jon Kern Points 796

Si vous utilisez MongoMapper, cela fonctionne :

Access.collection.update( {}, { '$rename' => { 'location' => 'location_info' } }, :multi => true )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X