Bazy NoSQL składują dane w postaci dokumentów JSON. Dokumenty takie odpytuje się przy użyciu zapytań specyficznych dla danej bazy danych. MongoDB udostępnia całkiem bogate API do efektywnego przeszukiwania dokumentów składowanych w kolekcjach. Zależnie od języka programowania z którego łączymy się z bazą, zapytania mogą być budowane w nieco odmienny sposób, ale koncepcja pozostaje ta sama. Poniżej kilka użytecznych przykładów na to jak pisać zapytania. Przykłady te nadają się do urchomienia z shella MongoDB (program
mongo.exe), jednak na przykład w C# składnia jest bardzo podobna. Tym co różni connectory jest sposób rzutowania danych do danego języka programowania.
Podstawowymi funkcjami służącymi do budowania zapytań są
find i
findOne. Pierwsza zwraca wszystkie dokumenty spełniające dany warunek, natomiast findOne zwraca tylko pierwszy dokument spełniający ten warunek. Jako argument przekazuje się obiekt JavaScript zgodny z językiem zapytań. Dokumentacja MongoDB mówi, że
find jest odpowiednikiem instrukcji SELECT z SQL, natomiast obiekt przekazywany jako parametr odpowiada instrukcji WHERE.
Wybieranie bezwarunkowe:
Nie podając warunku jako argument dla obu funkcji wybieramy wszystkie dokumenty, bądź pierwszy zaindeksowany.
db.users.find();
db.users.findOne();
Przeszukiwanie warunkowe:
Tutaj mamy sporo możliwości. Możemy żądać by dane property miało dokładnie jakąś wartość:
db.users.find({lastname: "Doe"});
Przeszukiwanie warunkowe wykonuje się za pomocą operatorów $lt i $gt (względnie $lte czy $gte).
var query = {};
query.lastname = "Doe";
query.age = { $gt :20};
db.users.find(query);
Podanie dwóch warunków powoduje, że oba muszą być spełnione, aby dokument został zwrócony.
Dokumenty zagnieżdżone:
Przy przeszukiwaniu zagnieżdżonych dokumentów, stosuje się notację z kropkami, tak jakbyśmy odczytywali zagnieżdżone property w JavaScripcie:
var query = {};
query["address.country"] = "USA";
db.users.find(query);
Projekcje:
Drugim, opcjonalnym argumentem dla zapytań jest obiekt, w którym możemy zadecydować, które pola nas interesują. Domyślnie zwrócone zostaną wszystkie pola dokumentu. Jeżeli chcemy któreś konkretne pola, pomijając inne, oznaczamy te pożądane wartością 1. Przy oznaczeniu pierwszego pola przez 1 zostanie zwrócone ono, oraz pola _id nadawane przez bazę. Aby je wyłączyć, możemy ustawić tą wartość na 0. Zatem aby zwrócić dokumenty z samymi imionami wystarczy:
db.users.find(query, {firstname:1, _id: 0});
Paginacja:
Stronnicowanie może być wykonywane bezpośrednio na bazie danych przy użyciu operatorów
limit i
take.
db.users.find().limit(1).skip(1);
Sortowanie:
.
Podobnie jak paginacja wykonywane na wynikach jako kolejna funkcja w łańcuchu wywołań
db.users.find().sort({age: 1});
Wartość
1 oznacza sortowanie rosnąco, wartość
-1 sortowanie malejąco.