No MongoDB, você pode usar o
$pullAll
operador para remover todas as instâncias dos valores especificados de uma matriz existente. Use
$pullAll
em conjunto com um método como update()
, updateOne()
, ou updateMany()
para atualizar o(s) documento(s) especificado(s) com a alteração. Exemplo
Suponha que temos uma coleção com os seguintes documentos:
{ "_id" : 1, "bar" : [ 1, 7, 2, 3, 8, 7, 1 ] } { "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] } { "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }
E digamos que queremos remover todos os valores de
7
da matriz no documento 1. Nós podemos fazer isso:
db.foo.update(
{ _id: 1 },
{ $pullAll: { bar: [ 7 ] } }
)
Saída:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Essa mensagem nos diz que um documento correspondeu e um (ou seja, o mesmo documento) foi modificado.
Vejamos agora a coleção:
db.foo.find()
Resultado:
{ "_id" : 1, "bar" : [ 1, 2, 3, 8, 1 ] } { "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] } { "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }
Podemos ver que o array no documento 1 teve todos os seus
7
valores removidos conforme especificado. Remover vários valores
O argumento que fornecemos para
$pullAll
é uma matriz e, portanto, podemos remover vários valores separando-os com uma vírgula. Exemplo:
db.foo.update(
{ _id: 2 },
{ $pullAll: { bar: [ 17, 18 ] } }
)
Saída:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Agora vamos verificar a coleção novamente:
db.foo.find()
Resultado:
{ "_id" : 1, "bar" : [ 1, 2, 3, 8, 1 ] } { "_id" : 2, "bar" : [ 0, 1, 8, 8 ] } { "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }
Podemos ver que os valores
17
e 18
foram removidos da matriz no documento 2. Atualizar todos os documentos
Você pode adicionar
multi: true
ou use o updateMany()
método para atualizar todos os documentos que correspondem aos critérios. Ao fazer isso, remova quaisquer critérios de seleção do primeiro documento de consulta (que especifica quais documentos devem ser atualizados). Em outras palavras, use um documento vazio como o primeiro argumento para o
update()
(ou updateMany()
) método. Exemplo:
db.foo.update(
{ },
{ $pullAll: { bar: [ 1, 8 ] } },
{ multi: true }
)
Saída:
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })
Nesse caso, podemos ver que três documentos corresponderam (porque há três documentos na coleção) e todos os três foram modificados (porque todos continham os valores especificados).
Vamos verificar a coleção novamente:
db.foo.find()
Resultado:
{ "_id" : 1, "bar" : [ 2, 3 ] } { "_id" : 2, "bar" : [ 0 ] } { "_id" : 3, "bar" : [ 15, 11, 0, 3 ] }
Podemos ver que todas as instâncias foram atualizadas conforme especificado.