In MongoDB können Sie den $unset
verwenden Feldaktualisierungsoperator, um ein Feld vollständig aus einem Dokument zu entfernen.
Der $unset
Der Operator wurde speziell entwickelt, um ein Feld und seinen Wert aus dem Dokument zu löschen.
Beispiel
Angenommen, wir haben eine Sammlung namens dogs
mit folgenden Dokumenten:
{ "_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 }
Angenommen, wir möchten den type
entfernen Feld (und seinen jeweiligen Wert) aus allen Dokumenten.
Wir können dies tun:
db.dogs.updateMany(
{ },
{ $unset: { type: "" } }
)
Ausgabe:
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 }
Dies sagt uns, dass vier Dokumente übereinstimmen (weil wir ein leeres Abfragedokument als erstes Argument verwendet haben) und vier aktualisiert wurden.
Lassen Sie uns nun die Sammlung erneut überprüfen:
db.dogs.find()
Ergebnis:
{ "_id" : 1, "name" : "Wag", "weight" : 20 } { "_id" : 2, "name" : "Bark", "weight" : 10 } { "_id" : 6, "name" : "Fetch", "weight" : 17 } { "_id" : 7, "name" : "Jake", "weight" : 30 }
Wir können sehen, dass der type
wurde vollständig aus jedem Dokument entfernt.
Beachten Sie, dass der angegebene Wert in $unset
Ausdruck (z. B. „“) hat keinen Einfluss auf die Operation.
Mehrere Felder entfernen
Sie können mehrere zu entfernende Felder angeben, indem Sie sie durch ein Komma trennen.
Beispiel:
db.dogs.updateMany(
{ },
{ $unset: { name: "", weight: "" } }
)
Ausgabe:
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 }
Überprüfen Sie die Sammlung:
db.dogs.find()
Ergebnis:
{ "_id" : 1 } { "_id" : 2 } { "_id" : 6 } { "_id" : 7 }
Jetzt nur noch die _id
Felder sind übrig.
Eingebettete Dokumente
Sie können die Punktnotation verwenden, um Felder aus eingebetteten Dokumenten zu entfernen.
Angenommen, wir haben eine Sammlung namens pets
mit folgendem Dokument:
{ "_id" : 1, "name" : "Wag", "details" : { "type" : "Dog", "weight" : 20, "awards" : { "Florida Dog Awards" : "Top Dog", "New York Marathon" : "Fastest Dog", "Sumo 2020" : "Biggest Dog" } } }
Und angenommen, wir wollen die awards
entfernen Feld aus dem Dokument.
Wir können dies tun:
db.pets.updateMany(
{ _id: 1 },
{ $unset: { "details.awards": "" } }
)
Ausgabe:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
Lassen Sie uns nun das Dokument überprüfen:
db.pets.findOne()
Ergebnis:
{ "_id" : 1, "name" : "Wag", "details" : { "type" : "Dog", "weight" : 20 } }
Die awards
Feld und sein Wert (der selbst ein eingebettetes Dokument war) wurde aus dem Dokument entfernt.