W MongoDB db.collection.findOneAndDelete()
metoda usuwa pojedynczy dokument i zwraca usunięty dokument.
Usuwa pierwszy pasujący dokument w kolekcji, który pasuje do filter
. sort
parametr może być użyty do określenia, który dokument zostanie usunięty.
collection
część to nazwa kolekcji, z której ma zostać usunięty dokument.
Przykład
Załóżmy, że mamy kolekcję o nazwie pets
który zawiera następujące dokumenty:
{ "_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" ] }
Możemy użyć db.collection.findOneAndDelete()
metoda usunięcia jednego z tych dokumentów.
db.pets.findOneAndDelete(
{ "type": "Cat" }
)
Wynik:
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
W tym przypadku użyłem zapytania, aby zawęzić je do kotów. Tylko jeden kot został usunięty, mimo że w kolekcji są dwa koty.
Sprawdźmy kolekcję.
db.pets.find()
Wynik:
{ "_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" ] }
Widzimy, że pierwszy kot (dokument 3) został usunięty.
Osadzone dokumenty
Jeśli masz dokumenty zawierające osadzone dokumenty, możesz użyć następujących metod do zapytania o dane w osadzonych dokumentach.
- Zapis kropkowy (np.
field.nestedfield: <value>
) - Forma zagnieżdżona (np. {
field: { nestedfield: <value> } }
). Pamiętaj, że ta opcja jest dostępna tylko w MongoDB 4.4.
Oto przykład, który używa notacji z kropkami do tworzenia zapytań w osadzonym dokumencie.
db.pets.findOneAndDelete({ "specs.height": 400 })
Wynik:
{ "_id" : 6, "name" : "Fetch", "type" : "Dog", "specs" : { "height" : 400, "weight" : 15, "color" : "brown" } }
Zgodnie z oczekiwaniami, dokument 6 został usunięty.
Poniższe zapytanie usuwa ten sam dokument, ale w tym przypadku używa zagnieżdżonego formularza do odwoływania się do osadzonego dokumentu.
db.pets.findOneAndDelete({
"specs" : {
"height" : 400,
"weight" : 15,
"color" : "brown"
}
})
W przypadku korzystania z formularza zagnieżdżonego zapytanie musi dokładnie pasować do całego osadzonego dokumentu. Na przykład następujące zapytanie nie pasuje:
db.pets.findOneAndDelete({
"specs" : {
"height" : 400
}
})
Wynik:
null
Tablice
Możesz odwoływać się do danych w tablicach, odwołując się do elementu tablicy przez jego indeks lub jego wartość.
Gdybyśmy chcieli usunąć wszystkie psy z nagrodą Top Dog, moglibyśmy napisać następujące zapytanie (które zwróci powyższego psa).
db.pets.findOneAndDelete({
"awards": "Top Dog"
})
Wynik:
{ "_id" : 7, "name" : "Jake", "type" : "Dog", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }
Możesz również określić indeks elementu w następujący sposób:
db.pets.findOneAndDelete({
"awards.0": "Top Dog"
})
Wymaga to, aby określona wartość znajdowała się pod określonym indeksem. Dlatego następujące zapytanie nie zwraca tego samego psa.
db.pets.findOneAndDelete({
"awards.1": "Top Dog"
})
Zauważ, że tablice są liczone od zera, więc indeks 0 określa pierwszy element, 1 określa drugi element i tak dalej.
sort
Parametr
Możesz użyć sort
parametr określający kolejność sortowania dokumentów dopasowanych przez filter
. Wpłynie to na to, który dokument zostanie usunięty.
Używając sort
parametr, wartość 1
sortuje dokumenty w porządku rosnącym, a wartość -1
sortuje je w porządku malejącym.
Argument należy przedstawić w formie dokumentu. Na przykład { sort: { "salary": 1 } }
sortuje według salary
pole w kolejności rosnącej.
Załóżmy na przykład, że tworzymy kolekcję o nazwie employees
z następującymi dokumentami:
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 }
])
Możemy uruchomić następujący kod, aby znaleźć dokumenty z pensją mniejszą niż 60000, a następnie usunąć ten, który jest najniższy z tych dokumentów.
db.employees.findOneAndDelete(
{ "salary": { $lt: 60000 } },
{
sort: { "salary": 1 }
}
)
Wynik:
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
Zgodnie z oczekiwaniami usunięto pracownika z najniższą pensją.
Oto, jak teraz wyglądają dokumenty.
db.employees.find()
Wynik:
{ "_id" : 1, "name" : "Sandy", "salary" : 55000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 4, "name" : "Chris", "salary" : 45000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 }
Widzimy więc, że Fritz został usunięty.
Przywróćmy go z powrotem do oryginalnego dokumentu.
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 }
])
Teraz uruchommy tę samą findOneAndDelete()
kod ponownie, ale tym razem posortujemy go w kolejności malejącej.
db.employees.findOneAndDelete(
{ "salary": { $lt: 60000 } },
{
sort: { "salary": -1 }
}
)
Wynik:
{ "_id" : 1, "name" : "Sandy", "salary" : 55000 }
Tym razem Sandy została usunięta.
Sprawdźmy ponownie kolekcję.
db.employees.find()
Wynik:
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Chris", "salary" : 45000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 }
Zgodnie z oczekiwaniami Sandy nie ma już w kolekcji.
Więcej informacji
db.collection.findOneAndDelete()
metoda akceptuje również inne parametry, takie jak projection
(aby określić podzbiór pól do zwrócenia), maxTimeMS
i sort
.
Więcej informacji znajdziesz w dokumentacji MongoDB.