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

Comment supprimer un champ d'un document MongoDB ($unset)

Dans MongoDB, vous pouvez utiliser le $unset opérateur de mise à jour de champ pour supprimer complètement un champ d'un document.

Le $unset est conçu spécifiquement pour supprimer un champ et sa valeur du document.

Exemple

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

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 6, "name" : "Fetch", "type" : "Dog", "weight" : 17 }
{ "_id" : 7, "name" : "Jake", "type" : "Dog", "weight" : 30 }

Et supposons que nous voulions supprimer le type champ (et sa valeur respective) de tous les documents.

Nous pouvons faire ceci :

db.dogs.updateMany(
   { },
   { $unset: { type: "" } }
)

Sortie :

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

Cela nous indique que quatre documents correspondent (parce que nous avons utilisé un document de requête vide comme premier argument) et quatre ont été mis à jour.

Maintenant, vérifions à nouveau la collection :

db.dogs.find()

Résultat :

{ "_id" : 1, "name" : "Wag", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "weight" : 10 }
{ "_id" : 6, "name" : "Fetch", "weight" : 17 }
{ "_id" : 7, "name" : "Jake", "weight" : 30 }

Nous pouvons voir que le type champ a été complètement supprimé de chaque document.

Notez que la valeur spécifiée dans le $unset l'expression (c'est-à-dire "") n'a pas d'impact sur l'opération.

Supprimer plusieurs champs

Vous pouvez spécifier plusieurs champs à supprimer en les séparant par une virgule.

Exemple :

db.dogs.updateMany(
   { },
   { $unset: { name: "", weight: "" } }
)

Sortie :

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

Vérifiez la collection :

db.dogs.find()

Résultat :

{ "_id" : 1 }
{ "_id" : 2 }
{ "_id" : 6 }
{ "_id" : 7 }

Maintenant seulement le _id il reste des champs.

Documents intégrés

Vous pouvez utiliser la notation par points pour supprimer des champs des documents intégrés.

Supposons que nous ayons une collection appelée pets avec le document suivant :

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

Et supposons que nous voulions supprimer les awards champ du document.

Nous pouvons faire ceci :

db.pets.updateMany(
   { _id: 1 },
   { $unset: { "details.awards": "" } }
)

Sortie :

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

Vérifions maintenant le document :

db.pets.findOne()

Résultat :

{
	"_id" : 1,
	"name" : "Wag",
	"details" : {
		"type" : "Dog",
		"weight" : 20
	}
}

Les awards champ et sa valeur (qui était elle-même un document intégré) a été supprimée du document.