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.