db.collection.deleteOne()
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.deleteOne()
Remove um único documento de uma coleção.
Retorna: Um documento contendo: Um booleano
acknowledged
comotrue
se a operação foi executada com preocupação de gravação ou se a preocupação de gravaçãofalse
foi desativadadeletedCount
contendo o número de documentos excluídos
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 deleteOne()
tem o seguinte formato:
db.collection.deleteOne( <filter>, { writeConcern: <document>, collation: <document>, hint: <document|string> } )
O método deleteOne()
utiliza os seguintes parâmetros:
Parâmetro | Tipo | Descrição | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
documento | Especifica os critérios de exclusão usando operadores de query. Especifique 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 |
Comportamento
Ordem de exclusão
db.collection.deleteOne()
exclui o primeiro documento que corresponde ao filtro. Use um campo que faça parte de um índice único, como _id
, para exclusões precisas.
Coleções fragmentadas
Para usar db.collection.deleteOne()
em uma coleção fragmentada:
Se você segmentar apenas um fragmento, poderá usar uma chave de fragmento parcial na especificação da consulta ou,
Se você configurar o
limit: 1
, você não precisará fornecer a chave de fragmento ou o campo_id
na especificação de query.
Transações
db.collection.deleteOne()
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.
Entradas de oplog
Se uma operação db.collection.deleteOne()
excluir um documento com êxito, a operação adicionará uma entrada no oplog (registro de operações). Se a operação falhar ou não localizar um documento a ser excluído, a operação não adicionará uma entrada no oplog.
Exemplos
Excluir um único documento
A coleção orders
tem documentos com a seguinte estrutura:
db.orders.insertOne( { _id: ObjectId("563237a41a4d68582c2509da"), stock: "Brent Crude Futures", qty: 250, type: "buy-limit", limit: 48.90, creationts: ISODate("2015-11-01T12:30:15Z"), expiryts: ISODate("2015-11-01T12:35:15Z"), client: "Crude Traders Inc." } )
A seguinte operação exclui o pedido com _id:
ObjectId("563237a41a4d68582c2509da")
:
try { db.orders.deleteOne( { _id: ObjectId("563237a41a4d68582c2509da") } ); } catch (e) { print(e); }
A operação retorna:
{ acknowledged: true, deletedCount: 1 }
A operação a seguir exclui o primeiro documento com expiryts
maior que ISODate("2015-11-01T12:40:15Z")
try { db.orders.deleteOne( { expiryts: { $lt: ISODate("2015-11-01T12:40:15Z") } } ); } catch (e) { print(e); }
A operação retorna:
{ acknowledged: true, deletedCount: 1 }
deleteOne() com Preocupação de gravação
Dado um conjunto de réplicas de três nós, a operação a seguir especifica um w
de majority
, wtimeout
de 100
:
try { db.orders.deleteOne( { _id: ObjectId("563237a41a4d68582c2509da") }, { w: "majority", wtimeout: 100 } ); } catch (e) { print (e); }
Se a confirmação demorar mais que o limite wtimeout
, a exceção será lançada:
WriteConcernError({ code: 64, errmsg: "waiting for replication timed out", errInfo: { wtimeout: true, writeConcern: { w: "majority", wtimeout: 100, provenance: "getLastErrorDefaults" } } })
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 restaurants
possui os seguintes documentos:
db.restaurants.insertMany( [ { _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.restaurants.deleteOne( { category: "cafe", status: "A" }, { collation: { locale: "fr", strength: 1 } } )
Especificar hint
para operações de exclusão
No mongosh
, crie uma coleção students
com os seguintes documentos:
db.members.insertMany( [ { _id: 1, student: "Richard", grade: "F", points: 0 }, { _id: 2, student: "Jane", grade: "A", points: 60 }, { _id: 3, student: "Adam", grade: "F", points: 0 }, { _id: 4, student: "Ronan", grade: "D", points: 20 }, { _id: 5, student: "Noah", grade: "F", points: 0 }, { _id: 6, student: "Henry", grade: "A", points: 86 } ] )
Crie o seguinte índice na coleção:
db.members.createIndex( { grade: 1 } )
A seguinte operação de exclusão sugere explicitamente o uso do índice { grade: 1 }
:
db.members.deleteOne( { points: { $lte: 20 }, grade: "F" }, { hint: { grade: 1 } } )
Observação
Se você especificar um índice que não existe, a operação emitirá erros.
O comando delete retorna o seguinte:
{ acknowledged: true, deletedCount: 1 }
Para visualizar os índices usados, é possível usar o pipeline $indexStats
:
db.members.aggregate( [ { $indexStats: { } }, { $sort: { name: 1 } } ] )
O campo accesses.ops
na saída $indexStats
indica o número de operações que utilizaram o índice.