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.