MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Renommer un champ dans une collection MongoDB

Dans MongoDB, vous pouvez renommer un champ lors de la mise à jour des documents d'une collection.

Pour renommer un champ, appelez le $rename opérateur avec le nom actuel du champ et le nouveau nom. Cela renomme le champ dans tous les documents correspondants qui ont un champ avec ce nom.

Exemple

Supposons que nous ayons une collection appelée employees avec les documents suivants :

{ "_id" : 1, "name" : "Sandy", "salary" : 55000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 4, "name" : "Chris", "salary" : 45000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }

Et supposons que nous voulions renommer le name champ à employee .

Nous pourrions faire ceci :

db.employees.updateMany( 
  { }, 
  { $rename: { "name": "employee" } } 
)

Sortie :

{ "acknowledged" : true, "matchedCount" : 5, "modifiedCount" : 5 }

Maintenant, lorsque nous utilisons le find() méthode pour retourner les documents dans la collection, on voit le résultat suivant :

db.employees.find()

Résultat :

{ "_id" : 1, "salary" : 55000, "employee" : "Sandy" }
{ "_id" : 2, "salary" : 128000, "employee" : "Sarah" }
{ "_id" : 3, "salary" : 25000, "employee" : "Fritz" }
{ "_id" : 4, "salary" : 45000, "employee" : "Chris" }
{ "_id" : 5, "salary" : 82000, "employee" : "Beck" }

Renommer plusieurs champs

Vous pouvez renommer plusieurs champs en les séparant par une virgule.

Exemple :

db.employees.updateMany( 
  { }, 
  { $rename: { "employee": "e", "salary": "s" } } 
)

Sortie :

{ "acknowledged" : true, "matchedCount" : 5, "modifiedCount" : 5 }

Et voici à quoi ressemble la collection maintenant :

{ "_id" : 1, "e" : "Sandy", "s" : 55000 }
{ "_id" : 2, "e" : "Sarah", "s" : 128000 }
{ "_id" : 3, "e" : "Fritz", "s" : 25000 }
{ "_id" : 4, "e" : "Chris", "s" : 45000 }
{ "_id" : 5, "e" : "Beck", "s" : 82000 }

Documents intégrés

Vous pouvez utiliser la notation par points pour mettre à jour les noms de champs dans les documents intégrés.

Exemple de document :

db.pets.findOne()

Résultat :

{
	"_id" : 1,
	"name" : "Wag",
	"details" : {
		"type" : "Dog",
		"weight" : 20,
		"awards" : {
			"Florida Dog Awards" : "Top Dog",
			"New York Marathon" : "Fastest Dog",
			"Sumo 2020" : "Biggest Dog"
		}
	}
}

Mettons à jour certains des champs du document intégré :

db.pets.updateMany( 
  { }, 
  { $rename: { 
      "details.type": "details.t", 
      "details.weight": "details.w",
      "details.awards": "details.a"
    } 
  } 
)

Maintenant, lorsque nous vérifions le document, nous voyons ce qui suit :

db.pets.findOne()

Résultat :

{
	"_id" : 1,
	"name" : "Wag",
	"details" : {
		"a" : {
			"Florida Dog Awards" : "Top Dog",
			"New York Marathon" : "Fastest Dog",
			"Sumo 2020" : "Biggest Dog"
		},
		"t" : "Dog",
		"w" : 20
	}
}

Nous pouvons également mettre à jour les noms de champs des documents qui sont intégrés dans les documents intégrés :

db.pets.updateMany( 
  { }, 
  { $rename: { 
      "details.a.Florida Dog Awards": "details.a.fda",
      "details.a.New York Marathon": "details.a.nym",
      "details.a.Sumo 2020": "details.a.s2020"
    } 
  } 
)

Et vérifions à nouveau le document :

db.pets.findOne()

Résultat :

{
	"_id" : 1,
	"name" : "Wag",
	"details" : {
		"a" : {
			"fda" : "Top Dog",
			"nym" : "Fastest Dog",
			"s2020" : "Biggest Dog"
		},
		"t" : "Dog",
		"w" : 20
	}
}