Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Uso do deleteOne com filtro de mais de um registro

Boa tarde!

Uma dúvida surgiu durante o acompanhamento dos deletes, vamos supor que eu use o deleteOne ou o updateOne e a condição no filtro tenha mais de um registro como resultado. Nesse caso o Banco de Dados dará alguma mensagem e não executará ou ele executará a linha de comando?

E também há a possibilidade de passar condições combinadas na linha de comando nessas execuções? Por exemplo:

  • Combinar o or com um and no método ($or {"filme1","filme2"} $and {"classificação": 8.1}

Att. Leandro

2 respostas
solução!

Olá, Leandro, tudo bem?

Quando utilizamos o método deleteOne ou updateOne no MongoDB e a condição no filtro retorna mais de um registro, o banco de dados executará a linha de comando normalmente, sem dar nenhuma mensagem de erro. No entanto, apenas o primeiro documento que corresponder à condição será excluído ou atualizado.

Por exemplo, se tivermos uma coleção de filmes e quisermos excluir todos os filmes com a classificação "8.1", podemos usar o método deleteOne com a seguinte linha de comando:

db.filmes.deleteOne({"classificação": 8.1})

Nesse caso, apenas o primeiro filme com a classificação "8.1" será excluído. Se houver mais filmes com essa classificação, eles não serão afetados.

Quanto à possibilidade de passar condições combinadas na linha de comando, como combinar o operador $or com o operador $and, é possível sim. Por exemplo, se quisermos buscar os filmes do gênero comedia ou gênero romance e filmes com a classificação "8.1" ou classificação "9.0", podemos usar a seguinte linha de comando:

db.filmes.find( {
    $and: [
        { $or: [ {"genero": "comedia"},{"genero": "romance"}] },
        { $or: [ {"classificação": 8.1}, {"classificação": 9.0} ] }
    ]
} )

Dessa forma, apenas filmes que correspondem a essas condições serão retornados.

Espero ter ajudado e bons estudos!

Olá Danielle, boa tarde!

Obrigado pelo retorno. As dúvidas foram esclarecidas.

Um abraço!