excluir
Definição
delete
O comando
delete
remove documentos de uma coleção. Um único comandodelete
pode conter várias especificações de exclusão. Os métodos de exclusão fornecidos pelos drivers do MongoDB usam este comando internamente.Alterado na versão 5.0.
Dica
Em
mongosh
, este comando também pode ser executado através dos métodos de assistentedeleteOne()
,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. Um documento que Express a 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. 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 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
_id
na especificação de consulta.
Limites
O tamanho total de todas as queries (ou seja, os valores de campo q
) na array deletes
deve ser menor ou igual ao tamanho máximo do documento JSON.
O número total de documentos excluídos na array deletes
deve ser menor ou igual ao 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
_id
na 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 devolvido mostra que o comando encontrou e 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 devolvido mostra que o comando encontrou e excluiu 35
documentos no total. 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 } } )
O documento devolvido mostra que o comando encontrou e excluiu 21
documentos no total 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ê pode 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.writeErrors
Uma array de documentos que contém informações sobre qualquer erro encontrado durante a operação de exclusão. A matriz
writeErrors
contém um documento de erro para cada instrução de exclusão com erro.Cada documento de erro contém as seguintes informações:
delete.writeConcernError
Documento descrevendo erros relacionados à preocupação de gravação.
Alterado na versão 7.1: Quando
delete
é executado emmongos
, os erros de write concern são sempre relatados, mesmo quando ocorrem um ou mais erros de escrita.Em versões anteriores, a ocorrência de erros de gravação poderia fazer com que
delete
não relatasse erros de preocupação de gravação .Os documentos
writeConcernError
contêm os seguintes campos:delete.writeConcernError.errInfo.writeConcern
O 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.provenance
Um 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çãoclientSupplied
A preocupação de gravação foi especificada no aplicativo.
customDefault
A preocupação de gravação originou-se de um valor padrão personalizado definido. Consulte
setDefaultRWConcern
.getLastErrorDefaults
A preocupação de gravação originada do campo
settings.getLastErrorDefaults
do conjunto de réplicas.implicitDefault
A preocupação de gravação originou-se do servidor na ausência de todas as outras especificações de preocupação de gravação.
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 }