MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So entfernen Sie ein Feld aus einem MongoDB-Dokument ($unset)

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.