No MongoDB o
db.collection.findOneAndDelete() O método exclui um único documento e retorna o documento excluído. Ele exclui o primeiro documento correspondente na coleção que corresponde ao
filter . A sort pode ser usado para influenciar qual documento é excluído. A
collection parte é o nome da coleção da qual excluir o documento. Exemplo
Suponha que tenhamos uma coleção chamada
pets que contém os seguintes documentos:{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
{ "_id" : 6, "name" : "Fetch", "type" : "Dog", "specs" : { "height" : 400, "weight" : 15, "color" : "brown" } }
{ "_id" : 7, "name" : "Jake", "type" : "Dog", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] } Podemos usar o
db.collection.findOneAndDelete() método para excluir um desses documentos. db.pets.findOneAndDelete(
{ "type": "Cat" }
) Resultado:
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 } Nesse caso, usei uma consulta para reduzi-la a apenas gatos. Apenas um gato foi excluído, embora existam dois gatos na coleção.
Vamos conferir a coleção.
db.pets.find() Resultado:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
{ "_id" : 6, "name" : "Fetch", "type" : "Dog", "specs" : { "height" : 400, "weight" : 15, "color" : "brown" } }
{ "_id" : 7, "name" : "Jake", "type" : "Dog", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] } Podemos ver que o primeiro gato (documento 3) foi excluído.
Documentos incorporados
Se você tiver documentos que contenham documentos incorporados, poderá usar os métodos a seguir para consultar dados nos documentos incorporados.
- Notação de ponto (por exemplo,
field.nestedfield: <value>) - Formulário aninhado (por exemplo, {
field: { nestedfield: <value> } }). Observe que esta opção está disponível apenas no MongoDB 4.4.
Aqui está um exemplo que usa a notação de ponto para consultar dentro do documento incorporado.
db.pets.findOneAndDelete({ "specs.height": 400 }) Resultado:
{
"_id" : 6,
"name" : "Fetch",
"type" : "Dog",
"specs" : {
"height" : 400,
"weight" : 15,
"color" : "brown"
}
} Como esperado, o documento 6 foi excluído.
A consulta a seguir exclui o mesmo documento, mas, nesse caso, usa o formulário aninhado para se referir ao documento incorporado.
db.pets.findOneAndDelete({
"specs" : {
"height" : 400,
"weight" : 15,
"color" : "brown"
}
}) Ao usar o formulário aninhado, a consulta deve corresponder exatamente a todo o documento incorporado. Por exemplo, a consulta a seguir não corresponde:
db.pets.findOneAndDelete({
"specs" : {
"height" : 400
}
}) Resultado:
null
Matrizes
Você pode fazer referência a dados em matrizes referenciando o elemento da matriz por seu índice ou por seu valor.
Se quisermos excluir todos os cães com o prêmio Top Dog, poderíamos escrever a seguinte consulta (que retornará o cão acima).
db.pets.findOneAndDelete({
"awards": "Top Dog"
}) Resultado:
{
"_id" : 7,
"name" : "Jake",
"type" : "Dog",
"awards" : [
"Top Dog",
"Best Dog",
"Biggest Dog"
]
} Você também pode especificar o índice do elemento, assim:
db.pets.findOneAndDelete({
"awards.0": "Top Dog"
}) Fazer isso requer que o valor especificado esteja no índice especificado. Portanto, a consulta a seguir não retorna o mesmo cão.
db.pets.findOneAndDelete({
"awards.1": "Top Dog"
}) Observe que as matrizes são baseadas em zero, portanto, um índice de 0 especifica o primeiro elemento, 1 especifica o segundo elemento e assim por diante.
A sort Parâmetro
Você pode usar o
sort parâmetro para especificar uma ordem de classificação para os documentos correspondidos pelo filter . Isso influenciará qual documento será excluído. Ao usar o
sort parâmetro, um valor de 1 classifica os documentos em ordem crescente e um valor de -1 classifica-os em ordem decrescente. O argumento precisa ser fornecido como um documento. Por exemplo,
{ sort: { "salary": 1 } } classifica pelo salary campo em ordem crescente. Por exemplo, suponha que criamos uma coleção chamada
employees com os seguintes documentos:db.employees.insertMany([
{ _id: 1, name: "Sandy", salary: 55000 },
{ _id: 2, name: "Sarah", salary: 128000 },
{ _id: 3, name: "Fritz", salary: 25000 },
{ _id: 4, name: "Chris", salary: 45000 },
{ _id: 5, name: "Beck", salary: 82000 }
]) Poderíamos executar o código a seguir para encontrar documentos com um salário inferior a 60.000 e, em seguida, excluir o menor desses documentos.
db.employees.findOneAndDelete(
{ "salary": { $lt: 60000 } },
{
sort: { "salary": 1 }
}
) Resultado:
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 } Como esperado, o funcionário com o menor salário foi excluído.
Veja como estão os documentos agora.
db.employees.find() Resultado:
{ "_id" : 1, "name" : "Sandy", "salary" : 55000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 4, "name" : "Chris", "salary" : 45000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 } Assim, podemos ver que Fritz foi excluído.
Vamos reverter para o documento original.
db.employees.remove({})
db.employees.insertMany([
{ _id: 1, name: "Sandy", salary: 55000 },
{ _id: 2, name: "Sarah", salary: 128000 },
{ _id: 3, name: "Fritz", salary: 25000 },
{ _id: 4, name: "Chris", salary: 45000 },
{ _id: 5, name: "Beck", salary: 82000 }
]) Agora vamos executar o mesmo
findOneAndDelete() código novamente, mas desta vez vamos classificá-lo em ordem decrescente. db.employees.findOneAndDelete(
{ "salary": { $lt: 60000 } },
{
sort: { "salary": -1 }
}
) Resultado:
{ "_id" : 1, "name" : "Sandy", "salary" : 55000 } Desta vez, Sandy foi excluído.
Vamos verificar a coleção novamente.
db.employees.find() Resultado:
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 4, "name" : "Chris", "salary" : 45000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 } Como esperado, Sandy não está mais na coleção.
Mais informações
O
db.collection.findOneAndDelete() O método também aceita outros parâmetros, como projection (para especificar um subconjunto de campos a serem retornados), maxTimeMS , e collation . Consulte a documentação do MongoDB para obter mais informações.