V MongoDB můžete použít $unset operátor aktualizace polí pro úplné odstranění pole z dokumentu.
$unset Operátor je navržen speciálně k odstranění pole a jeho hodnoty z dokumentu.
Příklad
Předpokládejme, že máme sbírku nazvanou dogs s následujícími dokumenty:
{ "_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 }
A předpokládejme, že chceme odstranit type pole (a jeho příslušnou hodnotu) ze všech dokumentů.
Můžeme to udělat:
db.dogs.updateMany(
{ },
{ $unset: { type: "" } }
) Výstup:
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 } To nám říká, že se shodovaly čtyři dokumenty (protože jsme jako první argument použili prázdný dokument dotazu) a čtyři byly aktualizovány.
Nyní znovu zkontrolujeme sbírku:
db.dogs.find() Výsledek:
{ "_id" : 1, "name" : "Wag", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "weight" : 10 }
{ "_id" : 6, "name" : "Fetch", "weight" : 17 }
{ "_id" : 7, "name" : "Jake", "weight" : 30 }
Vidíme, že type pole bylo zcela odstraněno z každého dokumentu.
Všimněte si, že zadaná hodnota v $unset výraz (tj. „“) nemá na operaci vliv.
Odebrat více polí
Můžete zadat více polí k odstranění tak, že je oddělíte čárkou.
Příklad:
db.dogs.updateMany(
{ },
{ $unset: { name: "", weight: "" } }
) Výstup:
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 } Zkontrolujte sbírku:
db.dogs.find() Výsledek:
{ "_id" : 1 }
{ "_id" : 2 }
{ "_id" : 6 }
{ "_id" : 7 }
Nyní pouze _id pole jsou ponechána.
Vložené dokumenty
K odstranění polí z vložených dokumentů můžete použít tečkovou notaci.
Předpokládejme, že máme sbírku nazvanou pets s následujícím dokumentem:
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
A předpokládejme, že chceme odstranit awards pole z dokumentu.
Můžeme to udělat:
db.pets.updateMany(
{ _id: 1 },
{ $unset: { "details.awards": "" } }
) Výstup:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } Nyní zkontrolujeme dokument:
db.pets.findOne() Výsledek:
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20
}
}
awards pole a jeho hodnota (která byla sama o sobě vloženým dokumentem) byla z dokumentu odstraněna.