В MongoDB можете да използвате $unset Оператор за актуализиране на полето, за да премахнете напълно поле от документ.
$unset Операторът е създаден специално за изтриване на поле и неговата стойност от документа.
Пример
Да предположим, че имаме колекция, наречена dogs със следните документи:
{ "_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 }
И да предположим, че искаме да премахнем type поле (и съответната стойност) от всички документи.
Можем да направим това:
db.dogs.updateMany(
{ },
{ $unset: { type: "" } }
) Изход:
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 } Това ни казва, че четири документа съвпадат (тъй като използвахме празен документ за заявка като първи аргумент) и четири са актуализирани.
Сега нека проверим колекцията отново:
db.dogs.find() Резултат:
{ "_id" : 1, "name" : "Wag", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "weight" : 10 }
{ "_id" : 6, "name" : "Fetch", "weight" : 17 }
{ "_id" : 7, "name" : "Jake", "weight" : 30 }
Можем да видим, че type полето е напълно премахнато от всеки документ.
Имайте предвид, че посочената стойност в $unset изразът (т.е. „”) не оказва влияние върху операцията.
Премахване на множество полета
Можете да посочите няколко полета за премахване, като ги разделите със запетая.
Пример:
db.dogs.updateMany(
{ },
{ $unset: { name: "", weight: "" } }
) Изход:
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 } Проверете колекцията:
db.dogs.find() Резултат:
{ "_id" : 1 }
{ "_id" : 2 }
{ "_id" : 6 }
{ "_id" : 7 }
Сега само _id полетата са оставени.
Вградени документи
Можете да използвате нотация с точки, за да премахнете полета от вградени документи.
Да предположим, че имаме колекция, наречена pets със следния документ:
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
И да предположим, че искаме да премахнем awards поле от документа.
Можем да направим това:
db.pets.updateMany(
{ _id: 1 },
{ $unset: { "details.awards": "" } }
) Изход:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } Сега нека проверим документа:
db.pets.findOne() Резултат:
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20
}
}
awards полето и неговата стойност (която сама по себе си е вграден документ) е премахната от документа.