Definição
deleteRemove documentos de uma coleção. Um único comando pode conter várias especificações de exclusão. Os métodos de exclusão do driver MongoDB usam esse comando internamente.
Alterado na versĂŁo 5.0.:
Dica
Em
mongosh, esse comando também pode ser executado por meio dos métodos auxiliaresdeleteOne(),deleteMany()efindOneAndDelete().Os métodos auxiliares são práticos para os usuários
mongosh, mas podem nĂŁo retornar o mesmo nĂvel de informações que os comandos do banco de dados. Nos casos em que a praticidade nĂŁo for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.Retorna: Um documento que contĂ©m o status da operação. Consulte SaĂda para detalhes.
Compatibilidade
Esse comando 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 comando tem a seguinte sintaxe:
db.runCommand( { delete: <collection>, deletes: [ { q : <query>, limit : <integer>, collation: <document>, hint: <document|string> }, ... ], comment: <any>, let: <document>, // Added in MongoDB 5.0 ordered: <boolean>, writeConcern: { <write concern> }, maxTimeMS: <integer> } )
Campos de comando
O comando utiliza os seguintes campos:
Campo | Tipo | Descrição | |||||
|---|---|---|---|---|---|---|---|
string | O nome da coleção de destino. | ||||||
array | Uma array de uma ou mais declarações de exclusão para executar na coleção denominada. | ||||||
| any | Opcional. Um comentário fornecido pelo usuário para anexar a este comando. Depois de definido, esse comentário aparece junto com os registros desse comando nos seguintes locais:
Um comentário pode ser qualquer tipo BSON válido (string, inteiro, objeto, array etc). | |||||
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 um exemplo completo utilizando Novidades na versão 5.0.: | ||||||
booleano | Opcional. Se | ||||||
documento | Opcional. Especifica a write concern. Omitir para usar a preocupação de gravação 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. | ||||||
| non-negative integer | Opcional. Especifica um limite de tempo em milissegundos. Se você não especificar um valor para O MongoDB encerra as operações que excedem o limite de tempo alocado usando o mesmo mecanismo de |
Cada elemento do array deletes contém os seguintes campos:
Campo | Tipo | Descrição | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
documento | A query que corresponde aos documentos a serem excluĂdos. | |||||||||||
inteiro | O nĂşmero de documentos correspondentes para excluir. Especifique um | |||||||||||
documento | Opcional. Opcional. Especifica a agrupamento para utilizar 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 ou string | 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 |
Comportamento
Coleções fragmentadas
Para usar operações delete em uma coleção fragmentada que especifique a opção limit: 1:
Se você segmentar apenas um fragmento, poderá usar uma chave de fragmento parcial na especificação da consulta ou,
Você pode fornecer a chave de estilhaço ou o campo
_idna especificação de consulta.
Limites
O tamanho total de todos os documentos de query no array deletes não deve exceder o tamanho máximo do documento BSON.
O nĂşmero total de documentos excluĂdos na array deletes nĂŁo deve exceder o tamanho máximo do volume.
Transações
excluir 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.
Exemplos
Limite o nĂşmero de documentos excluĂdos
O exemplo a seguir exclui da coleção orders um documento que tenha o status igual a D especificando o limit de 1:
db.runCommand( { delete: "orders", deletes: [ { q: { status: "D" }, limit: 1 } ] } )
O documento retornado mostra que o comando excluiu 1 documentos. Consulte SaĂda para detalhes.
{ "ok" : 1, "n" : 1 }
Observação
Para usar operações delete em uma coleção fragmentada que especifique a opção limit: 1:
Se você segmentar apenas um fragmento, poderá usar uma chave de fragmento parcial na especificação da consulta ou,
Você pode fornecer a chave de estilhaço ou o campo
_idna especificação de consulta.
Excluir todos os documentos que correspondem a uma condição
O exemplo a seguir exclui da coleção orders todos os documentos que possuem o status igual a D especificando o limit de 0:
db.runCommand( { delete: "orders", deletes: [ { q: { status: "D" }, limit: 0 } ], writeConcern: { w: "majority", wtimeout: 5000 } } )
O documento retornado mostra que o comando excluiu 13 documentos. Consulte SaĂda para detalhes.
{ "ok" : 1, "n" : 13 }
Excluir todos os documentos de uma coleção
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().
Exclua todos os documentos na coleção orders especificando uma condição de query vazia e um limit de 0:
db.runCommand( { delete: "orders", deletes: [ { q: { }, limit: 0 } ], writeConcern: { w: "majority", wtimeout: 5000 } } )
O documento retornado mostra que o comando excluiu 35 documentos. Consulte SaĂda para detalhes.
{ "ok" : 1, "n" : 35 }
ExclusĂŁo em massa
O seguinte exemplo executa múltiplas operações de exclusão na coleção orders:
db.runCommand( { delete: "orders", deletes: [ { q: { status: "D" }, limit: 0 }, { q: { cust_num: 99999, item: "abc123", status: "A" }, limit: 1 } ], ordered: false, writeConcern: { w: 1, j: true } } )
O documento devolvido mostra que o comando excluiu 21 documentos para as duas declarações de exclusĂŁo. Consulte SaĂda para detalhes.
{ "ok" : 1, "n" : 21 }
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.
Uma coleção myColl possui os seguintes documentos:
{ _id: 1, category: "café", status: "A" } { _id: 2, category: "cafe", status: "a" } { _id: 3, category: "cafE", status: "a" }
A seguinte operação inclui a opção coleção:
db.runCommand({ delete: "myColl", deletes: [ { q: { category: "cafe", status: "a" }, limit: 0, collation: { locale: "fr", strength: 1 } } ] })
Especificar hint para operações de exclusão
No mongosh, crie uma coleção members com os seguintes documentos:
db.members.insertMany([ { "_id" : 1, "member" : "abc123", "status" : "P", "points" : 0, "misc1" : null, "misc2" : null }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment" }, { "_id" : 3, "member" : "lmn123", "status" : "P", "points" : 0, "misc1" : null, "misc2" : null }, { "_id" : 4, "member" : "pqr123", "status" : "D", "points" : 20, "misc1" : "Deactivated", "misc2" : null }, { "_id" : 5, "member" : "ijk123", "status" : "P", "points" : 0, "misc1" : null, "misc2" : null }, { "_id" : 6, "member" : "cde123", "status" : "A", "points" : 86, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment" } ])
Crie os seguintes Ăndices na coleção:
db.members.createIndex( { status: 1 } ) db.members.createIndex( { points: 1 } )
A seguinte operação de exclusĂŁo sugere explicitamente o uso do Ăndice { status: 1 }:
db.runCommand({ delete: "members", deletes: [ { q: { "points": { $lte: 20 }, "status": "P" }, limit: 0, hint: { status: 1 } } ] })
Observação
Se vocĂŞ especificar um Ăndice que nĂŁo existe, a operação emitirá erros.
Para visualizar o Ăndice utilizado, execute o explain na operação:
db.runCommand( { explain: { delete: "members", deletes: [ { q: { "points": { $lte: 20 }, "status": "P" }, limit: 0, hint: { status: 1 } } ] }, verbosity: "queryPlanner" } )
Usar variáveis em let
Novidades na versĂŁo 5.0.:
Para definir variáveis que você possa acessar em outro lugar no comando, use a opção let.
Observação
Para filtrar resultados usando uma variável, você deve acessar a variável dentro do operador $expr.
Criar uma coleção cakeFlavors:
db.cakeFlavors.insertMany( [ { _id: 1, flavor: "chocolate" }, { _id: 2, flavor: "strawberry" }, { _id: 3, flavor: "cherry" } ] )
O exemplo a seguir define uma variável targetFlavor em let e usa a variável para excluir o sabor do bolo de morango:
db.runCommand( { delete: db.cakeFlavors.getName(), deletes: [ { q: { $expr: { $eq: [ "$flavor", "$$targetFlavor" ] } }, limit: 1 } ], let : { targetFlavor: "strawberry" } } )
SaĂda
O documento devolvido contém um subconjunto dos seguintes campos:
delete.writeErrorsUma array de documentos que contém informações sobre qualquer erro encontrado durante a operação de exclusão. A
writeErrorsarray contém um documento de erro para cada declaração de exclusão com erro.Cada documento de erro contém as seguintes informações:
delete.writeConcernErrorUma array de documentos que contém informações sobre qualquer erro encontrado durante a operação de exclusão.
Alterado na versĂŁo 7.0.6.:
(tambĂ©m disponĂvel em 6.0.14 e 5.0.30): quando
deleteé executado em, os erros de preocupação de gravação são sempre relatados, mesmo quando ocorrem um ou maismongosdeleteerros de escrita. Em versões anteriores, a ocorrência de erros de gravação poderia fazer com que não relatasse erros de preocupação de gravação .Cada documento de erro contém os seguintes campos:
delete.writeConcernError.errInfo.writeConcernO objeto de write concern usado para a operação correspondente. Para obter informações sobre os campos de objeto de write concern, consulte Especificação de write concern.
O objeto de write concern também pode conter o seguinte campo, indicando a origem da write concern:
delete.writeConcernError.errInfo.writeConcern.provenanceUm valor de string que indica a origem do write concern (conhecido como write concern
provenance). A tabela a seguir mostra os valores possĂveis para este campo e sua significância:ProveniĂŞnciaDescriçãoclientSuppliedA write concern foi especificada no aplicativo.
customDefaultA write concern originou-se de um valor padrĂŁo personalizado definido. Consulte
setDefaultRWConcern.getLastErrorDefaultsA write concern originada do campo
settings.getLastErrorDefaultsdo conjunto de réplicas.implicitDefaultA write concern originou-se do servidor na ausência de todas as outras especificações de write concern.
Veja a seguir um documento de exemplo retornado para um comando delete bem-sucedido:
{ ok: 1, n: 1 }
A seguir está um documento de exemplo retornado para um comando delete que encontrou um erro porque especificou um Ăndice inexistente no campo hint:
{ n: 0, writeErrors: [ { index: 0, code: 2, errmsg: 'error processing query: ns=test.products: hat $eq "bowler"\n' + 'Sort: {}\n' + 'Proj: {}\n' + ' planner returned error :: caused by :: hint provided does not correspond to an existing index' } ], ok: 1 }