MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB findOneAndDelete()

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.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB / Meteor / Eksportuj MONGO_URL do wdrożonych aplikacji

  2. Czy powinienem przechowywać tokeny JWT w redis?

  3. MongoDB pobierz poddokument

  4. MongoDB i CodeIgniter

  5. Średnie zapytania agregacyjne w Meteor