sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo eliminar un campo de un documento MongoDB ($unset)

En MongoDB, puede usar $unset operador de actualización de campo para eliminar completamente un campo de un documento.

El $unset El operador está diseñado específicamente para eliminar un campo y su valor del documento.

Ejemplo

Supongamos que tenemos una colección llamada dogs con los siguientes documentos:

{ "_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 }

Y supongamos que queremos eliminar el type (y su respectivo valor) de todos los documentos.

Podemos hacer esto:

db.dogs.updateMany(
   { },
   { $unset: { type: "" } }
)

Salida:

{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 }

Esto nos dice que cuatro documentos coincidieron (porque usamos un documento de consulta vacío como primer argumento) y cuatro se actualizaron.

Ahora revisemos la colección nuevamente:

db.dogs.find()

Resultado:

{ "_id" : 1, "name" : "Wag", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "weight" : 10 }
{ "_id" : 6, "name" : "Fetch", "weight" : 17 }
{ "_id" : 7, "name" : "Jake", "weight" : 30 }

Podemos ver que el type El campo se ha eliminado por completo de cada documento.

Tenga en cuenta que el valor especificado en el $unset expresión (es decir, "") no afecta la operación.

Eliminar varios campos

Puede especificar varios campos para eliminar separándolos con una coma.

Ejemplo:

db.dogs.updateMany(
   { },
   { $unset: { name: "", weight: "" } }
)

Salida:

{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 }

Consulta la colección:

db.dogs.find()

Resultado:

{ "_id" : 1 }
{ "_id" : 2 }
{ "_id" : 6 }
{ "_id" : 7 }

Ahora solo el _id quedan campos.

Documentos incrustados

Puede usar la notación de puntos para eliminar campos de documentos incrustados.

Supongamos que tenemos una colección llamada pets con el siguiente 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"
		}
	}
}

Y supongamos que queremos eliminar los awards campo del documento.

Podemos hacer esto:

db.pets.updateMany(
   { _id: 1 },
   { $unset: { "details.awards": "" } }
)

Salida:

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

Ahora revisemos el documento:

db.pets.findOne()

Resultado:

{
	"_id" : 1,
	"name" : "Wag",
	"details" : {
		"type" : "Dog",
		"weight" : 20
	}
}

Los awards y su valor (que en sí mismo era un documento incrustado) se ha eliminado del documento.