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

MongoDB — Zapytanie o kolekcję

MongoDB udostępnia db.collection.find() metoda wyszukiwania dokumentów w kolekcji.

db.collection.find() wybiera dokumenty w kolekcji i zwraca kursor do wybranych dokumentów.

Zwróć wszystkie dokumenty

Ten przykład zwraca wszystkie dokumenty od muzyków kolekcja:

db.musicians.find()

Wynik:

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
{ "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
{ "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }

Zwraca wszystkie dokumenty, ponieważ nie przekazaliśmy żadnych parametrów jako kryteriów filtrowania.

Powyższe zapytanie jest skróconą wersją db.musicians.find( {} ) . W powyższym zapytaniu pominęliśmy nawiasy klamrowe {} . Jest to całkowicie ważne podczas pracy z MongoDB.

Dodaj kryteria filtrowania

Możesz filtrować wyniki, podając tylko te kryteria, które Cię interesują.

Na przykład, jeśli interesuje nas tylko Deep Purple od artystów kolekcja:

db.artists.find({ artistname : "Deep Purple" })

Wynik:

{ "_id" : ObjectId("5781f85d48ef8c6b3ffb0150"), "artistname" : "Deep Purple", "albums" : [ { "album" : "Machine Head", "year" : 1972, "genre" : "Rock" }, { "album" : "Stormbringer", "year" : 1974, "genre" : "Rock" } ] }

Sformatuj wyniki

Powyższe wyniki mogą być trudne do odczytania. Dokument jest zwracany jako jeden długi wiersz tekstu.

Możesz użyć pretty() metoda formatowania wyników, aby były nieco łatwiejsze do odczytania.

Wystarczy dołączyć pretty() do końca tak:

db.artists.find({ artistname : "Deep Purple" }).pretty()

Wynik:

{
	"_id" : ObjectId("5781f85d48ef8c6b3ffb0150"),
	"artistname" : "Deep Purple",
	"albums" : [
		{
			"album" : "Machine Head",
			"year" : 1972,
			"genre" : "Rock"
		},
		{
			"album" : "Stormbringer",
			"year" : 1974,
			"genre" : "Rock"
		}
	]
}

Więcej opcji filtrowania

Oto kilka innych sposobów filtrowania wyników.

Określ AND Warunki

Możesz określić, że powinny być zwracane tylko dokumenty zawierające dwie lub więcej określonych wartości.

W tym przykładzie określamy, że tylko muzycy grający na perkusji i osoby urodzone przed 1950 r. powinny zostać zwrócone. Tylko dokumenty spełniające oba kryteria zostaną zwrócone.

db.musicians.find( { instrument: "Drums", born: { $lt: 1950 } } )

Wynik:

{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }

Określ OR Warunki

Możesz również określić, że jedna lub druga wartość powinna być prawdziwa. Dopóki jeden z warunków jest spełniony, dokument zostanie zwrócony.

W tym przykładzie potrzebujemy dokumentów zawierających muzyków, którzy grają na perkusji lub urodzili się przed 1950 rokiem.

db.musicians.find(
   {
     $or: [ { instrument: "Drums" }, { born: { $lt: 1950 } } ]
   }
)

Wynik:

{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
{ "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }

$in Operator

$in operator umożliwia podanie listy wartości. Jeśli dokument zawiera którąkolwiek z tych wartości, zostanie zwrócony.

Korzystając z poniższego przykładu, szukamy wszystkich muzyków, którzy śpiewają lub grają na gitarze.

db.musicians.find( { instrument: { $in: [ "Vocals", "Guitar" ] } } )

Wynik

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
{ "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }

Zapytanie tablicy dokumentów

Ten przykład wysyła zapytanie do tablicy dokumentów. Znajduje albumy wydane po 2000 roku.

db.artists.find(
   {
      albums: {
                $elemMatch: {
                     year: { $gt: 2000 }
                }
      }
   }
).pretty()

Wynik:

{
	"_id" : ObjectId("578217c248ef8c6b3ffb015a"),
	"artistname" : "Robben Ford",
	"albums" : [
		{
			"album" : "Bringing it Back Home",
			"year" : 2013,
			"genre" : "Blues"
		},
		{
			"album" : "Talk to Your Daughter",
			"year" : 1988,
			"genre" : "Blues"
		}
	]
}
{
	"_id" : ObjectId("578217c248ef8c6b3ffb015b"),
	"artistname" : "Snoop Dogg",
	"albums" : [
		{
			"album" : "Tha Doggfather",
			"year" : 1996,
			"genre" : "Rap"
		},
		{
			"album" : "Reincarnated",
			"year" : 2013,
			"genre" : "Reggae"
		}
	]
}

Zauważysz, że te wyniki zawierają również albumy sprzed 2000 roku. Zgadza się — tak działają bazy danych zorientowane na dokumenty. Każde zapytanie zwróci cały dokument (ale tylko te dokumenty, które spełniają określone kryteria).

db.collection.findOne() Metoda

Możesz użyć db.collection.findOne() metoda, aby zwrócić jeden dokument, który spełnia określone kryteria zapytania.

Jeśli wiele dokumentów spełnia kryteria, zwracany jest tylko pierwszy, zgodnie z naturalną kolejnością dokumentów na dysku.

Więc przeszukując całą kolekcję w ten sposób:

db.musicians.findOne( )

Zwróci tylko jeden dokument:

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }

Jeśli zmienimy findOne() do find() tak:

db.musicians.find()

Widzimy, że w kolekcji jest tak naprawdę 8 dokumentów:

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
{ "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
{ "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Usuń pole znalezione w dowolnej tablicy mongodb

  2. Formatowanie ISODate z Mongodb

  3. Jaki jest zalecany sposób usuwania indeksów za pomocą Mongoose?

  4. Najlepsze oprogramowanie pośredniczące do przechowywania sesji dla Express + MongoDB

  5. Pobierz wartości jako tablicę elementów po $lookup