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.