In MongoDB, puoi usare $unset operatore di aggiornamento del campo per rimuovere completamente un campo da un documento.
Il $unset operatore è progettato specificamente per eliminare un campo e il suo valore dal documento.
Esempio
Supponiamo di avere una collezione chiamata dogs con i seguenti documenti:
{ "_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 }
E supponiamo di voler rimuovere il type campo (e il rispettivo valore) da tutti i documenti.
Possiamo farlo:
db.dogs.updateMany(
{ },
{ $unset: { type: "" } }
) Uscita:
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 } Questo ci dice che quattro documenti corrispondono (perché abbiamo usato un documento di query vuoto come primo argomento) e quattro sono stati aggiornati.
Ora controlliamo di nuovo la collezione:
db.dogs.find() Risultato:
{ "_id" : 1, "name" : "Wag", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "weight" : 10 }
{ "_id" : 6, "name" : "Fetch", "weight" : 17 }
{ "_id" : 7, "name" : "Jake", "weight" : 30 }
Possiamo vedere che il type campo è stato completamente rimosso da ogni documento.
Nota che il valore specificato in $unset l'espressione (es. "") non influisce sull'operazione.
Rimuovi più campi
Puoi specificare più campi da rimuovere separandoli con una virgola.
Esempio:
db.dogs.updateMany(
{ },
{ $unset: { name: "", weight: "" } }
) Uscita:
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 } Controlla la collezione:
db.dogs.find() Risultato:
{ "_id" : 1 }
{ "_id" : 2 }
{ "_id" : 6 }
{ "_id" : 7 }
Ora solo il _id i campi sono rimasti.
Documenti incorporati
Puoi utilizzare la notazione con punti per rimuovere i campi dai documenti incorporati.
Supponiamo di avere una collezione chiamata pets con il seguente documento:
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
E supponiamo di voler rimuovere i awards campo dal documento.
Possiamo farlo:
db.pets.updateMany(
{ _id: 1 },
{ $unset: { "details.awards": "" } }
) Uscita:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } Ora controlliamo il documento:
db.pets.findOne() Risultato:
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20
}
}
I awards campo e il relativo valore (che era esso stesso un documento incorporato) è stato rimosso dal documento.