MongoDB - objęte zapytaniami
W tym rozdziale dowiemy się o zadawanych zapytaniach.
Co to jest objęte zapytaniem?
Zgodnie z oficjalną dokumentacją MongoDB, objęte zapytaniem jest zapytanie, w którym -
- Wszystkie pola w zapytaniu są częścią indeksu.
- Wszystkie pola zwrócone w zapytaniu znajdują się w tym samym indeksie.
Ponieważ wszystkie pola obecne w zapytaniu są częścią indeksu, MongoDB dopasowuje warunki zapytania i zwraca wynik przy użyciu tego samego indeksu bez faktycznego zaglądania do dokumentów. Ponieważ indeksy są obecne w pamięci RAM, pobieranie danych z indeksów jest znacznie szybsze w porównaniu do pobierania danych przez skanowanie dokumentów.
Korzystanie z zapytań objętych zakresem
Aby przetestować objęte zapytania, rozważ następujący dokument w users kolekcja -
{
"_id": ObjectId("53402597d852426020000003"),
"contact": "987654321",
"dob": "01-01-1991",
"gender": "M",
"name": "Tom Benzamin",
"user_name": "tombenzamin"
}
Najpierw utworzymy indeks złożony dla users zbiór na polach gender i user_name używając następującego zapytania -
>db.users.createIndex({gender:1,user_name:1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
Teraz ten indeks obejmie następujące zapytanie -
>db.users.find({gender:"M"},{user_name:1,_id:0})
{ "user_name" : "tombenzamin" }
Oznacza to, że w przypadku powyższego zapytania MongoDB nie szukałby dokumentów bazy danych. Zamiast tego pobierałby wymagane dane z indeksowanych danych, co jest bardzo szybkie.
Ponieważ nasz indeks nie obejmuje _idfield, wyraźnie wykluczyliśmy je z zestawu wyników naszego zapytania, ponieważ MongoDB domyślnie zwraca pole _id w każdym zapytaniu. Zatem następujące zapytanie nie zostałoby uwzględnione w utworzonym powyżej indeksie -
>db.users.find({gender:"M"},{user_name:1})
{ "_id" : ObjectId("53402597d852426020000003"), "user_name" : "tombenzamin" }
Na koniec pamiętaj, że indeks nie może obejmować zapytania, jeśli -
- Każde z indeksowanych pól jest tablicą
- Każde z indeksowanych pól jest dokumentem podrzędnym