MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como remover um campo de um documento do MongoDB ($unset)


No MongoDB, você pode usar o $unset operador de atualização de campo para remover completamente um campo de um documento.

O $unset O operador é projetado especificamente para excluir um campo e seu valor do documento.

Exemplo


Suponha que tenhamos uma coleção chamada dogs com os seguintes 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 }

E suponha que queremos remover o type campo (e seu respectivo valor) de todos os documentos.

Nós podemos fazer isso:
db.dogs.updateMany(
   { },
   { $unset: { type: "" } }
)

Saída:
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 }

Isso nos diz que quatro documentos corresponderam (porque usamos um documento de consulta vazio como o primeiro argumento) e quatro foram atualizados.

Agora vamos verificar a coleção novamente:
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 o type campo foi completamente removido de cada documento.

Observe que o valor especificado no $unset expressão (ou seja, “”) não afeta a operação.

Remover vários campos


Você pode especificar vários campos para remover separando-os com uma vírgula.

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

Saída:
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 }

Confira a coleção:
db.dogs.find()

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

Agora apenas o _id campos são deixados.

Documentos incorporados


Você pode usar a notação de ponto para remover campos de documentos incorporados.

Suponha que tenhamos uma coleção chamada pets com o seguinte 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 suponha que queremos remover os awards campo do documento.

Nós podemos fazer isso:
db.pets.updateMany(
   { _id: 1 },
   { $unset: { "details.awards": "" } }
)

Saída:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

Agora vamos verificar o documento:
db.pets.findOne()

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

Os awards campo e seu valor (que era um documento incorporado) foi removido do documento.