W MongoDB możesz użyć $unset operator aktualizacji pola, aby całkowicie usunąć pole z dokumentu.
$unset operator został zaprojektowany specjalnie do usuwania pola i jego wartości z dokumentu.
Przykład
Załóżmy, że mamy kolekcję o nazwie dogs z następującymi dokumentami:
{ "_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 }
I załóżmy, że chcemy usunąć type pole (i jego odpowiednią wartość) ze wszystkich dokumentów.
Możemy to zrobić:
db.dogs.updateMany(
{ },
{ $unset: { type: "" } }
) Wyjście:
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 } To mówi nam, że pasowały cztery dokumenty (ponieważ użyliśmy pustego dokumentu zapytania jako pierwszego argumentu) i cztery zostały zaktualizowane.
Teraz ponownie sprawdźmy kolekcję:
db.dogs.find() Wynik:
{ "_id" : 1, "name" : "Wag", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "weight" : 10 }
{ "_id" : 6, "name" : "Fetch", "weight" : 17 }
{ "_id" : 7, "name" : "Jake", "weight" : 30 }
Widzimy, że type pole zostało całkowicie usunięte z każdego dokumentu.
Zwróć uwagę, że określona wartość w $unset wyrażenie (np. „”) nie ma wpływu na operację.
Usuń wiele pól
Możesz określić wiele pól do usunięcia, oddzielając je przecinkami.
Przykład:
db.dogs.updateMany(
{ },
{ $unset: { name: "", weight: "" } }
) Wyjście:
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 } Sprawdź kolekcję:
db.dogs.find() Wynik:
{ "_id" : 1 }
{ "_id" : 2 }
{ "_id" : 6 }
{ "_id" : 7 }
Teraz tylko _id pola są pozostawione.
Osadzone dokumenty
Możesz użyć notacji kropkowej, aby usunąć pola z osadzonych dokumentów.
Załóżmy, że mamy kolekcję o nazwie pets z następującym 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"
}
}
}
I załóżmy, że chcemy usunąć awards pole z dokumentu.
Możemy to zrobić:
db.pets.updateMany(
{ _id: 1 },
{ $unset: { "details.awards": "" } }
) Wyjście:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } Sprawdźmy teraz dokument:
db.pets.findOne() Wynik:
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20
}
}
awards pole i jego wartość (która sama była osadzonym dokumentem) została usunięta z dokumentu.