Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

db.collection.deleteMany()

Nesta página

  • Definição
  • Compatibilidade
  • Sintaxe
  • Comportamento
  • Exemplos
db.collection.deleteMany()

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 para sua linguagem de programação:

C#Java SyncNode.jsPyMongoCC++GoJava RSKotlin CoroutineKotlin SyncPHPMongoidRustScala

Remove todos os documentos que correspondem ao filter de uma collection.

Retorna:Um documento contendo:
  • Um booleano acknowledged como true se a operação foi executada com preocupação de gravação ou se a preocupação de gravação false foi desativada

  • deletedCount contendo o número de documentos excluídos

Observação

Se você estiver excluindo todos os documentos em uma collection grande, pode ser mais rápido soltar a collection e recriá-la. Antes de descartar a coleção, observe todos os índices na coleção. Você deve recriar todos os índices que existiram na coleção original. Se a collection original foi fragmentada, você também deverá fragmentar a collection recriada.

Para obter mais informações sobre como descartar uma collection, consulte db.collection.drop().

Você pode utilizar o db.collection.deleteMany() para implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem

  • 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

O método deleteMany() tem a seguinte sintaxe:

db.collection.deleteMany(
<filter>,
{
writeConcern: <document>,
collation: <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:

collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

Ao especificar agrupamento, o campo locale é obrigatório; todos os outros campos de agrupamento são opcionais. Para obter descrições dos campos, consulte Documento de agrupamento.

Se o agrupamento não for especificado, mas a coleção tiver um agrupamento padrão (consulte db.createCollection()), a operação usará o agrupamento especificado para a coleção.

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.

Novidade na versão 3.4.

documento

Opcional. Um documento ou string que especifica o índice a ser usado para atender 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 hint para operações de exclusão.

db.collection.deleteMany() lança uma exceção WriteError se usado em uma coleção de séries temporais. Para remover todos os documentos de uma coleção de séries temporais, use db.collection.drop().

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.

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.

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.

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.

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 todos os documentos onde client : "Crude Traders Inc.":

try {
db.orders.deleteMany( { "client" : "Crude Traders Inc." } );
} catch (e) {
print (e);
}

A operação retorna:

{ "acknowledged" : true, "deletedCount" : 10 }

A operação a seguir exclui todos os documentos em que stock : "Brent Crude Futures" e limit são maiores que 48.88:

try {
db.orders.deleteMany( { "stock" : "Brent Crude Futures", "limit" : { $gt : 48.88 } } );
} catch (e) {
print (e);
}

A operação retorna:

{ "acknowledged" : true, "deletedCount" : 8 }

Dado um conjunto de réplicas de três membros, a operação a seguir especifica um w de majority e wtimeout de 100

try {
db.orders.deleteMany(
{ "client" : "Crude Traders Inc." },
{ writeConcern: { w : "majority", wtimeout : 100 }}
);
} catch (e) {
print (e);
}

Se a confirmação demorar mais que o limite wtimeout, a seguinte exceção será lançada:

WriteConcernError({
"code" : 64,
"errmsg" : "waiting for replication timed out",
"errInfo" : {
"wtimeout" : true,
"writeConcern" : {
"w" : "majority",
"wtimeout" : 100,
"provenance" : "getLastErrorDefaults"
}
}
})

Dica

Veja também:

Novidade na versão 3.4.

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.deleteMany(
{ category: "cafe", status: "A" },
{ collation: { locale: "fr", strength: 1 } }
)

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.members.deleteMany(
{ "points": { $lte: 20 }, "status": "P" },
{ hint: { status: 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" : 3 }

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.

Voltar

db.collection.dataSize