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.