excluir
Definição
delete
The
delete
command removes documents from a collection. A singledelete
command can contain multiple delete specifications. The delete methods provided by the MongoDB drivers use this command internally.Alterado na versão 5.0.
Dica
In
mongosh
, this command can also be run through thedeleteOne()
,deleteMany()
, andfindOneAndDelete()
helper methods.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 | An array of one or more delete statements to perform in the named collection. | ||||||
| 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 For a complete example using Novidades na versão 5.0. | ||||||
booleano | Optional. If | ||||||
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 |
Each element of the deletes
array contains the following fields:
Campo | Tipo | Descrição | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
documento | The query that matches documents to delete. | |||||||||||
inteiro | The number of matching documents to delete. Specify either a | |||||||||||
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 índiceaser 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
To use delete
operations for a sharded
collection that specify the limit: 1
option:
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
The total size of all the queries (i.e. the q
field values) in the
deletes
array must be less than or equal to the maximum
BSON document size.
The total number of delete documents in the deletes
array must be
less than or equal to the maximum bulk size.
Transações
excluir can be used inside distributed transactions.
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
Limit the Number of Documents Deleted
The following example deletes from the orders
collection one
document that has the status
equal to D
by specifying the
limit
of 1
:
db.runCommand( { delete: "orders", deletes: [ { q: { status: "D" }, limit: 1 } ] } )
The returned document shows that the command deleted 1
document.
See Saída for details.
{ "ok" : 1, "n" : 1 }
Observação
To use delete
operations for a sharded
collection that specify the limit: 1
option:
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.
Delete All Documents That Match a Condition
The following example deletes from the orders
collection all
documents that have the status
equal to D
by specifying the
limit
of 0
:
db.runCommand( { delete: "orders", deletes: [ { q: { status: "D" }, limit: 0 } ], writeConcern: { w: "majority", wtimeout: 5000 } } )
The returned document shows that the command found and deleted 13
documents. See Saída for details.
{ "ok" : 1, "n" : 13 }
Delete All Documents from a Collection
Observação
If you are deleting all documents in a large collection, it may be faster to drop the collection and recreate it. Before dropping the collection, note all indexes on the collection. You must recreate any indexes that existed in the original collection. If the original collection was sharded, you must also estilhaço the recreated collection.
For more information on dropping a collection, see
db.collection.drop()
.
Delete all documents in the orders
collection by specifying an
empty query condition and a limit
of 0
:
db.runCommand( { delete: "orders", deletes: [ { q: { }, limit: 0 } ], writeConcern: { w: "majority", wtimeout: 5000 } } )
The returned document shows that the command found and deleted 35
documents in total. See Saída for details.
{ "ok" : 1, "n" : 35 }
Bulk Delete
The following example performs multiple delete operations on the
orders
collection:
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 } } )
The returned document shows that the command found and deleted 21
documents in total for the two delete statements. See
Saída for details.
{ "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" } ] )
The following example defines a targetFlavor
variable in let
and
uses the variable to delete the strawberry cake flavor:
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
An array of documents that contains information regarding any error encountered during the delete operation. The
writeErrors
array contains an error document for each delete statement that errors.Each error document contains the following information:
delete.writeConcernError
Documento descrevendo erros relacionados à preocupação de gravação.
Alterado na 7.0.6 versão: (também disponível em 6.0.14 e 5.0.30): Quando é
delete
mongos
executado em , erros de preocupação de gravação 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 quedelete
não relatasse erros de preocupação de gravação .The
writeConcernError
documents contian the following fields: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.
The following is an example document returned for a successful
delete
command:
{ ok: 1, n: 1 }
The following is an example document returned for a delete
command that encountered an error because it specified a non-existent
index in the hint
field:
{ 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 }