I MongoDB kan du bruge $unset feltopdateringsoperatør for fuldstændigt at fjerne et felt fra et dokument.
$unset operator er designet specifikt til at slette et felt og dets værdi fra dokumentet.
Eksempel
Antag, at vi har en samling kaldet dogs med følgende dokumenter:
{ "_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 }
Og antag, at vi vil fjerne type felt (og dets respektive værdi) fra alle dokumenter.
Vi kan gøre dette:
db.dogs.updateMany(
{ },
{ $unset: { type: "" } }
) Output:
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 } Dette fortæller os, at fire dokumenter matchede (fordi vi brugte et tomt forespørgselsdokument som det første argument), og fire blev opdateret.
Lad os nu tjekke 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, at type felt er blevet fuldstændig fjernet fra hvert dokument.
Bemærk, at den angivne værdi i $unset udtryk (dvs. "") påvirker ikke handlingen.
Fjern flere felter
Du kan angive flere felter, der skal fjernes, ved at adskille dem med et komma.
Eksempel:
db.dogs.updateMany(
{ },
{ $unset: { name: "", weight: "" } }
) Output:
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 } Tjek samlingen:
db.dogs.find() Resultat:
{ "_id" : 1 }
{ "_id" : 2 }
{ "_id" : 6 }
{ "_id" : 7 }
Nu kun _id felter er tilbage.
Indlejrede dokumenter
Du kan bruge punktnotation til at fjerne felter fra indlejrede dokumenter.
Antag, at vi har en samling kaldet pets med følgende 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"
}
}
}
Og antag, at vi vil fjerne awards felt fra dokumentet.
Vi kan gøre dette:
db.pets.updateMany(
{ _id: 1 },
{ $unset: { "details.awards": "" } }
) Output:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } Lad os nu tjekke dokumentet:
db.pets.findOne() Resultat:
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20
}
}
awards felt og dets værdi (som i sig selv var et indlejret dokument) er blevet fjernet fra dokumentet.