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

db.collection.findOneAndDelete()

Nesta página

  • Definição
  • Comportamento
  • Exemplos
db.collection.findOneAndDelete( filter, options )

Importante

Método mongosh

Esta página documenta um método mongosh . Esta não é a documentação para comandos de banco de dados ou drivers específicos de idioma, como Node.js.

Para o comando do banco de dados, consulte o comando delete.

Para drivers de API do MongoDB, consulte a documentação do driver MongoDB específica do idioma.

Para a documentação de shell legada do mongo, consulte a documentação para a versão correspondente do MongoDB Server:

mongo shell v4.4

Exclui um único documento com base nos critérios filter e sort, devolvendo o documento excluído.

O método findOneAndDelete() tem o seguinte formulário:

db.collection.findOneAndDelete(
<filter>,
{
writeConcern: <document>,
projection: <document>,
sort: <document>,
maxTimeMS: <number>,
collation: <document>
}
)

O método findOneAndDelete() utiliza os seguintes parâmetros:

Parâmetro
Tipo
Descrição
filter
documento

Os critérios de seleção para a exclusão. Os mesmos seletores de query que no método find() estão disponíveis.

Especifique um documento vazio { } para excluir o primeiro documento retornado na coleção.

Se não for especificado, o padrão será um documento vazio.

Se o argumento de query não for um documento, a operação apresentará erro.

writeConcern
documento

Opcional. Um documento que expressa o write concern. Omitir para usar o write concern padrão.

{ w: <value>, j: <boolean>, wtimeout: <number> }

Consulte Excluir um documento usando o WriteConcern para uso.

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.

projection
documento

Opcional. Um subconjunto de campos para retornar.

Para retornar todos os campos no documento retornado, omita este parâmetro.

Se o argumento de projeção não for um documento, a operação apresentará erro.

sort
documento

Opcional. Especifica uma ordem de classificação para os documentos correspondidos pelo filter.

Se o argumento de classificação não for um documento, a operação apresentará erro.

Consulte cursor.sort().

maxTimeMS
número
Opcional. Especifica um limite de tempo em milissegundos dentro do qual a operação deve ser concluída. Lança um erro se o limite for excedido.
collation
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.

Retorna:Retorna o documento excluído.

findOneAndDelete() exclui o primeiro documento correspondente na coleção que corresponda a filter. O parâmetro sort pode ser usado para influenciar qual documento será excluído.

Importante

Consistência de linguagem

Como parte de tornar a projeção find() e findAndModify() consistente com o estágio $project da agregação,

O parâmetro projection obtém um documento no seguinte formato:

{ field1: <value>, field2: <value> ... }
Projeção
Descrição
<field>: <1 or true>
Especifica a inclusão de um campo. Se você especificar um número inteiro diferente de zero para o valor de projeção, a operação tratará o valor como true.
<field>: <0 or false>
Especifica a exclusão de um campo.
"<field>.$": <1 or true>

Usa o operador de projeção de array $ para retornar o primeiro elemento que corresponde à condição de consulta no campo de array. Se você especificar um número inteiro diferente de zero para o valor de projeção, a operação tratará o valor como true.

Não disponível para visualizações.

<field>: <array projection>

Usa os operadores de projeção de array ($elemMatch, $slice) para especificar os elementos da array a serem incluídos.

Não disponível para visualizações.

<field>: <aggregation expression>

Especifica o valor do campo projetado.

Com o uso de expressões de agregação e sintaxe, incluindo o uso de literais e variáveis de agregação, você pode projetar novos campos ou projetar campos existentes com novos valores.

  • Se você especificar um literal não numérico e não booleano (como uma string literal ou um array ou uma expressão de operador) para o valor de projeção, o campo será projetado com o novo valor, por exemplo:

    • { field: [ 1, 2, 3, "$someExistingField" ] }

    • { field: "New String Value" }

    • { field: { status: "Active", total: { $sum: "$existingArray" } } }

  • Para projetar um valor literal para um campo, use a expressão de aggregation $literal, por exemplo:

    • { field: { $literal: 5 } }

    • { field: { $literal: true } }

    • { field: { $literal: { fieldWithValue0: 0, fieldWithValue1: 1 } } }

Para campos em documentos incorporados, você pode especificar o campo usando:

  • notação de pontos, por exemplo "field.nestedfield": <value>

  • formulário aninhado, por exemplo { field: { nestedfield: <value> } }

O campo _id é incluído nos documentos retornados por padrão, a menos que você especifique explicitamente _id: 0 na projeção para suprimir o campo.

Uma projection não pode conter especificações de inclusão e exclusão, com exceção do campo _id:

  • Em projeções que incluem explicitamente campos, o campo _id é o único campo que você pode excluir explicitamente.

  • Em projeções que excluem explicitamente campos, o campo _id é o único campo que você pode incluir explicitamente; entretanto, o campo _id é incluído por padrão.

Para obter mais informações sobre "projection", consulte também:

Ao utilizar db.collection.findOneAndDelete() em relação a uma coleção fragmentada, o query deve conter uma condição de igualdade na chave de fragmento.

documento em uma collection fragmentada podem não ter os campo principais do fragmento. Para direcionar um documento que não tenha a chave de shard, você pode usar a null correspondência de igualdade em conjunto com outra condição de filtro (como no campo _id ). Por exemplo:

{ _id: <value>, <shardkeyfield>: null } // _id of the document missing shard key

db.collection.findOneAndDelete() 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.

Se uma operação db.collection.findOneAndDelete() 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 para excluir, a operação não adicionará uma entrada no oplog.

A collection scores contém documentos semelhantes aos seguintes:

db.scores.insertMany( [
{ _id: 6305, name : "A. MacDyver", "assignment" : 5, "points" : 24 },
{ _id: 6308, name : "B. Batlock", "assignment" : 3, "points" : 22 },
{ _id: 6312, name : "M. Tagnum", "assignment" : 5, "points" : 30 },
{ _id: 6319, name : "R. Stiles", "assignment" : 2, "points" : 12 },
{ _id: 6322, name : "A. MacDyver", "assignment" : 2, "points" : 14 },
{ _id: 6234, name : "R. Stiles", "assignment" : 1, "points" : 10 }
] )

A seguinte operação localiza o primeiro documento onde name : M. Tagnum e o exclui:

db.scores.findOneAndDelete(
{ "name" : "M. Tagnum" }
)

A operação retorna o documento original que foi excluído:

{ _id: 6312, name: "M. Tagnum", "assignment" : 5, "points" : 30 }

A collection scores contém documentos semelhantes aos seguintes:

db.scores.insertMany( [
{ _id: 6305, name : "A. MacDyver", "assignment" : 5, "points" : 24 },
{ _id: 6308, name : "B. Batlock", "assignment" : 3, "points" : 22 },
{ _id: 6312, name : "M. Tagnum", "assignment" : 5, "points" : 30 },
{ _id: 6319, name : "R. Stiles", "assignment" : 2, "points" : 12 },
{ _id: 6322, name : "A. MacDyver", "assignment" : 2, "points" : 14 },
{ _id: 6234, name : "R. Stiles", "assignment" : 1, "points" : 10 }
] )

A operação a seguir usa um documento de write concern dentro do método db.collection.findOneAndDelete() com opções:

  • w:1 para solicitar a confirmação de que a operação de escrita foi propagada para o mongod autônomo ou para o primário em um conjunto de réplicas.

  • j:true para informar o número de instâncias do MongoDB especificadas em w:1 para que a exclusão seja gravada no diário em disco.

  • wtimeout : 1000 especificar um limite de tempo, em milésimos de segundo, para o write concern. wtimeout só é aplicável para valores w maiores que 1.

db.scores.findOneAndDelete(
{ name: "A. MacDyver" },
{
writeConcern: {
w : 1,
j : true,
wtimeout : 1000
}
}
)

A operação retorna o seguinte documento:

{ _id: 6305, name: 'A. MacDyver', assignment: 5, points: 24 }

O documento é excluído com as opções do writeConcern especificadas.

A collection scores contém documentos semelhantes aos seguintes:

db.scores.insertMany( [
{ _id: 6305, name : "A. MacDyver", "assignment" : 5, "points" : 24 },
{ _id: 6308, name : "B. Batlock", "assignment" : 3, "points" : 22 },
{ _id: 6312, name : "M. Tagnum", "assignment" : 5, "points" : 30 },
{ _id: 6319, name : "R. Stiles", "assignment" : 2, "points" : 12 },
{ _id: 6322, name : "A. MacDyver", "assignment" : 2, "points" : 14 },
{ _id: 6234, name : "R. Stiles", "assignment" : 1, "points" : 10 }
] )

A operação a seguir localiza primeiro todos os documentos onde name : "A. MacDyver". Em seguida, ele classifica points crescente antes de excluir o documento com o menor valor de pontos:

db.scores.findOneAndDelete(
{ "name" : "A. MacDyver" },
{ sort : { "points" : 1 } }
)

A operação retorna o documento original que foi excluído:

{ _id: 6322, name: "A. MacDyver", "assignment" : 2, "points" : 14 }

A seguinte operação usa projeção para retornar somente os campos _id e assignment no documento retornado:

db.scores.findOneAndDelete(
{ "name" : "A. MacDyver" },
{ sort : { "points" : 1 }, projection: { "assignment" : 1 } }
)

A operação retorna o documento original com os campos assignment e _id:

{ _id: 6322, "assignment" : 2 }

A seguinte operação define um limite de tempo de 5ms para concluir a exclusão:

try {
db.scores.findOneAndDelete(
{ "name" : "A. MacDyver" },
{ sort : { "points" : 1 }, maxTimeMS : 5 }
)
}
catch(e){
print(e)
}

Se a operação exceder o limite de tempo, ela retornará:

MongoServerError: operation exceeded time limit: { "ok": 0, "code" : 50, "codeName" : "MaxTimeMSExpired" }

Observação

Esta mensagem de erro foi reduzida por brevidade.

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:

db.myColl.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.myColl.findOneAndDelete(
{ category: "cafe", status: "a" },
{ collation: { locale: "fr", strength: 1 } }
);

A operação retorna o seguinte documento:

{ "_id" : 1, "category" : "café", "status" : "A" }
← db.collection.findOne()