sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man tar bort ett fält från ett MongoDB-dokument ($unset)

I MongoDB kan du använda $unset fältuppdateringsoperator för att helt ta bort ett fält från ett dokument.

$unset operatorn är utformad specifikt för att ta bort ett fält och dess värde från dokumentet.

Exempel

Anta att vi har en samling som heter dogs med följande dokument:

{ "_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 }

Och anta att vi vill ta bort type fältet (och dess respektive värde) från alla dokument.

Vi kan göra detta:

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

Utdata:

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

Detta säger oss att fyra dokument matchade (eftersom vi använde ett tomt frågedokument som första argument) och fyra uppdaterades.

Låt oss nu kontrollera samlingen igen:

db.dogs.find()

Resultat:

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

Vi kan se att type fältet har tagits bort helt från varje dokument.

Observera att det angivna värdet i $unset uttryck (dvs. "") påverkar inte operationen.

Ta bort flera fält

Du kan ange flera fält att ta bort genom att separera dem med ett kommatecken.

Exempel:

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

Utdata:

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

Kontrollera samlingen:

db.dogs.find()

Resultat:

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

Nu bara _id fält är kvar.

Inbäddade dokument

Du kan använda punktnotation för att ta bort fält från inbäddade dokument.

Anta att vi har en samling som heter pets med följande 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"
		}
	}
}

Och anta att vi vill ta bort awards fältet från dokumentet.

Vi kan göra detta:

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

Utdata:

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

Låt oss nu kontrollera dokumentet:

db.pets.findOne()

Resultat:

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

awards fältet och dess värde (som i sig var ett inbäddat dokument) har tagits bort från dokumentet.


  1. Fatalt fel - "Mongo"-klassen hittades inte

  2. Redis Publicera/prenumerera

  3. Gruppera efter specifikt element av array med mongo-aggregationsramverk

  4. Ta bort allt i en MongoDB-databas