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.