MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come rimuovere un campo da un documento MongoDB ($unset)

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.