Podręcznik
Bazy danych
Obsługa MongoDB za pomocą Node.js
Sterownik
Do obsługi systemu MongoDB za pomocą środowiska Node.js służy pakiet mongodb (nazywany sterownikiem, ang. driver), który można zainstalować za pomocą npm:
W kodzie JavaScript należy zaimportować klasę MongoClient z tego pakietu:
Nawiązanie połączenia
Aby nawiązać połączenie, należy sformułować tzw. identyfikator połączenia (ang. connection URI albo connection string), czyli zmienną tekstową, zawierającą informacje o adresie serwera, numerze portu i innych parametrach połączenia – na przykład:
...a następnie za jej pomocą utworzyć obiekt klasy MongoClient:
Asynchroniczne wykorzystanie połączenia
Pakiet mongodb wykorzystuje promises do realizacji asynchronicznej komunikacji z bazą danych. Dzięki temu, można tworzyć czytelny kod programu z użyciem słów async, await, try, catch itp. Szkielet fragmentu programu, realizującego komunikację z bazą MongoDB, może wyglądać następująco (p. dokumentacja):
try {
// ... tu należy realizować komunikację z bazą danych
// za pomocą obiektu client, używając "await"
} finally {
await client.close(); // zakończenie połączenia
}
}
run().catch(console.log) // wypisanie ewentualnych błędów
Komunikacja z bazą danych
Do komunikacji z bazą MongoDB można wykorzystać obiekt MongoClient podobnie, jak obsługuje się taką bazę za pomocą programu MongoDB Shell (omówionego w poprzednim podrozdziale). Na przykład, poniższy fragment kodu służy do tego, aby wyszukać w kolekcji bands bazy danych music dokument, w którym własność name ma wartość Queen:
var data = await bands.findOne({name: "Queen"});
console.log(data)
Listę podstawowych metod komunikacji z bazą danych MongoDB można znaleźć w dokumentacji:
Node.js Driver – Quick Reference
Pełny przykład
Poniższy przykład stanowi zebranie fragmentów kodu, omówionych wyżej.
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);
async function run() {
try {
var bands = client.db("music").collection("bands");
var data = await bands.findOne({name: "Queen"});
console.log(data)
} finally {
await client.close();
}
}
run().catch(console.log)
Więcej informacji: