MongoDB com drivers
Esta página documenta um método mongosh. Para ver o método equivalente em um driver MongoDB, consulte a página correspondente da sua linguagem de programação:
Definição
db.collection.deleteMany()Remove todos os documentos que correspondem ao
filterde uma collection.Retorna: Um documento contendo: Um booleano
acknowledgedcomotruese a operação foi executada com preocupação de gravação ou se a preocupação de gravaçãofalsefoi desativadadeletedCountcontendo o número de documentos excluídos
Observação
Se você estiver excluindo todos os documentos em uma coleção grande, pode ser mais rápido descartar a coleção e recriá-la. Antes de descartar a coleção, observe todos os índices na coleção. Você deve recriar todos os índices que existiam na coleção original. Se a coleção original foi fragmentada, você também deve fragmentar a coleção recriada.
Para obter mais informações sobre como soltar uma coleção, consulte db.collection.drop().
Compatibilidade
Esse método está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Observação
Este comando é aceito em todos os clusters do MongoDB Atlas. Para obter informações sobre o suporte do Atlas a todos os comandos, consulte Comandos não suportados.
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
O método deleteMany() tem a seguinte sintaxe:
db.collection.deleteMany( <filter>, { writeConcern: <document>, collation: <document>, hint: <document>|<string>, maxTimeMS: <int>, let: <document> } )
Parâmetro | Tipo | Descrição | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
documento | Especifica os critérios de exclusão usando operadores de query. Para excluir todos os documentos de uma collection, passe um documento vazio ( | |||||||||||
documento | Opcional. Um documento que expressa o write concern. Omitir para usar o write concern padrão. Não defina explicitamente a preocupação de gravação para a operação se for executada em uma transação. Para usar write concern com transações, consulte Transações e write concern. | |||||||||||
documento | Opcional. Especifica o agrupamento a ser usado para a operação. A colocação permite que os usuários especifiquem regras específicas do idioma para comparação de strings, como regras para letras maiúsculas e marcas de acento. A opção de agrupamento tem a seguinte sintaxe: Ao especificar agrupamento, o campo Se o agrupamento não for especificado, mas a coleção tiver um agrupamento padrão (consulte Se nenhum agrupamento for especificado para a coleção ou para as operações, o MongoDB usa a comparação binária simples usada nas versões anteriores para comparações de strings. Você não pode especificar vários agrupamentos para uma operação. Por exemplo, você não pode especificar agrupamentos diferentes por campo ou, se estiver realizando uma busca com uma classificação, não poderá usar um agrupamento para a busca e outro para a classificação. | |||||||||||
documento | Opcional. Um documento ou string que especifica o índice a ser usado para dar suporte ao predicado de query. A opção pode usar um documento de especificação de índice ou a string do nome do índice. Se você especificar um índice que não existe, a operação emitirá erros. Para um exemplo, consulte Especificar | |||||||||||
inteiro | Opcional. Especifica o limite de tempo, em milésimos de segundo, para que a operação de excluir seja executada antes de atingir o tempo limite. | |||||||||||
Documento | Opcional. Especifica um documento com uma lista de variáveis. Isso permite que você melhore a legibilidade do comando separando as variáveis do texto da query. A sintaxe do documento é: A variável é definida para o valor retornado pela expressão e não pode ser alterada posteriormente. Para acessar o valor de uma variável no comando, use o prefixo de dois cifrões ( Para usar uma variável para filtrar os resultados, você deve acessar a variável dentro do operador Para ver um exemplo completo com |
Comportamento
Coleções fragmentadas
Se
deleteMany()for executado fora de uma transação, as operações que visam mais de um fragmento transmitirão a operação para todos os fragmentos no cluster.Se
deleteMany()for executado dentro de uma transação, as operações que têm como alvo mais de um shard terão como alvo apenas os shards relevantes.
Aviso
Devido a migrações simultâneas de chunks, deleteMany() pode ser executado sem excluir todos os documentos que correspondem ao filtro especificado. Para excluir todos os documentos correspondentes, execute uma das seguintes operações:
Execute o método
deleteMany()iterativamente até que a consulta de localização correspondente com o mesmo filtro não retorne nenhum documento.Execute
deleteMany()em uma transação.Agende a janela de balanceamento para que as migrações de chunks ocorram somente em horários específicos e execute quaisquer operações
deleteMany()fora da janela especificada.
Excluir um único documento
Para excluir um único documento, use db.collection.deleteOne() em vez disso.
Ou então, use um campo que faça parte de um índice único , como _id.
Transações
db.collection.deleteMany() pode ser usado dentro de transações distribuídas.
Não defina explicitamente a preocupação de gravação para a operação se for executada em uma transação. Para usar write concern com transações, consulte Transações e write concern.
Importante
Na maioria dos casos, uma transação distribuída incorre em um custo de desempenho maior do que as gravações de um único documento, e a disponibilidade de transações distribuídas não deve substituir o design eficaz do esquema. Em muitos cenários, o modelo de dados desnormalizado (documentos e arrays incorporados) continuará a ser ideal para seus dados e casos de uso. Ou seja, para muitos cenários, modelar seus dados adequadamente minimizará a necessidade de transações distribuídas.
Para considerações adicionais sobre o uso de transações (como limite de tempo de execução e limite de tamanho do oplog), consulte também Considerações de produção.
Falha do nó primary
db.collection.deleteMany() exclui documentos um de cada vez. Se o nó primário falhar durante uma operação do db.collection.deleteMany(), os documentos que ainda não foram excluídos dos nós secundários não serão excluídos da coleção.
Entradas de oplog
Se uma operação db.collection.deleteMany() excluir com êxito um ou mais documentos, a operação adicionará uma entrada para cada documento excluído no oplog (log de operações). Se a operação falhar ou não encontrar nenhum documento a ser excluído, a operação não adicionará uma entrada no oplog.
Exemplos
Os exemplos nesta página usam dados do conjunto de dados de amostra sample_mflix. Para obter detalhes sobre como carregar esse conjunto de dados em sua implantação autogerenciada do MongoDB , consulte Carregar o conjunto de dados de amostra. Se você fez modificações nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.
Excluir vários documentos
A operação a seguir exclui todos os document em que year é anterior a 1910:
db.movies.deleteMany( { "year": { $lt: 1910 } } )
{ acknowledged: true, deletedCount: 4 }
Da mesma forma, esta operação exclui todos os document em que rated é igual a "G" e year é anterior a 1950:
db.movies.deleteMany( { "rated": "G", "year": { $lt: 1950 } } )
{ acknowledged: true, deletedCount: 9 }
deleteMany() com um Timeout e Variáveis de query
A operação a seguir exclui todos os **document** em que year é anterior à variável cutoffYear. O exemplo também define um limite de tempo de 3 segundos:
db.movies.deleteMany( { $expr: { $lt: [ "$year", "$$cutoffYear" ] } }, { let: { cutoffYear: 1910 }, maxTimeMS: 3000 } )
{ acknowledged: true, deletedCount: 4 }
deleteMany() com Write concern
Dado um conjunto de réplicas de três membros, a operação a seguir especifica um w de majority e wtimeout de 100
db.movies.deleteMany( { "rated": "G", "year": { $lt: 1950 } }, { writeConcern: { w: "majority", wtimeout: 100 } } )
{ acknowledged: true, deletedCount: 9 }
Se a confirmação demorar mais que o limite wtimeout, o MongoDB lançará um erro de write concern.
Especifique o agrupamento
A colocação permite que os usuários especifiquem regras específicas do idioma para comparação de strings, como regras para letras maiúsculas e marcas de acento.
A operação a seguir usa a opção de agrupamento com o locale inglês e strength: 2. O filtro rated: "g" corresponde a documentos com rated: "G" armazenados na coleção:
db.movies.deleteMany( { rated: "g", year: { $lt: 1950 } }, { collation: { locale: "en", strength: 2 } } )
{ acknowledged: true, deletedCount: 9 }
Especificar hint para operações de exclusão
Crie índices nos campos rated e metacritic:
db.movies.createIndex( { rated: 1 } ) db.movies.createIndex( { metacritic: 1 } )
A seguinte operação de exclusão sugere explicitamente o uso do índice { rated: 1 }:
db.movies.deleteMany( { "metacritic": { $lte: 15 }, "rated": "PG" }, { hint: { rated: 1 } } )
{ acknowledged: true, deletedCount: 7 }
Observação
Se você especificar um índice que não existe, a operação emitirá erros.
Para visualizar os índices usados, é possível usar o pipeline $indexStats :
db.movies.aggregate( [ { $indexStats: { } }, { $sort: { name: 1 } } ] )
O campo accesses.ops na saída $indexStats indica o número de operações que utilizaram o índice.