node.js MongoDB Samouczek z przykładami
⚡ Inteligentne podsumowanie
node.js MongoDB integracja umożliwia aplikacji Node łączenie się z bazą danych NoSQL, uruchamianie operacji CRUD i udostępnianie rekordów na żywo za pośrednictwem tras Express, przy użyciu natywnego sterownika mongodb wraz z Mongoose do modelowania danych opartego na schematach.

Większość współczesnych aplikacji internetowych ma w zapleczu jakiś system przechowywania danych. Na przykład, jeśli weźmiemy pod uwagę sklep internetowy,ping aplikacji, dane takie jak cena przedmiotu byłyby przechowywane w bazie danych.
Framework Node js może współpracować z bazami danych zarówno relacyjnymi (takimi jak Oracle i MS SQL Server) oraz nierelacyjne bazy danych (takie jak MongoDB). W tym samouczku zobaczymy, jak możemy korzystać z baz danych z poziomu aplikacji Node js.
Bazy danych Node.js i NoSQL
Na przestrzeni lat bazy danych NoSQL, takie jak MongoDB i relacyjnych baz danych, takich jak MySQL Stały się dość popularne jako bazy danych do przechowywania danych. Możliwość przechowywania dowolnego typu danych, a zwłaszcza w dowolnym formacie, sprawia, że bazy te są tak szeroko stosowane.
Node.js może współpracować z obydwoma MySQL oraz MongoDB jako bazy danych. Aby korzystać z którejkolwiek z tych baz danych, należy pobrać i używać wymaganych modułów za pomocą menedżera pakietów Node.
Dla litu szacuje się MySQLwymagany moduł nazywa się „mysql”. MongoDB, programiści mogą zainstalować oficjalną wersję natywną MongoDB sterownik, który jest pakietem używanym w przykładach kodu w tym artykule, lub biblioteka oparta na schemacie, taka jak Mangusta gdy aplikacja wymaga większej struktury.
Za pomocą tych modułów możesz wykonywać następujące operacje w Node.js
- Zarządzaj pulą połączeń – tutaj możesz określić liczbę MySQL połączenia z bazami danych, które powinny być utrzymywane i zapisywane przez Node.js.
- Utwórz i zamknij połączenie z bazą danych. W obu przypadkach możesz udostępnić funkcję wywołania zwrotnego, którą można wywołać za każdym razem, gdy wykonywane są metody połączenia „utwórz” i „zamknij”.
- Można wykonywać zapytania, aby uzyskać dane z odpowiednich baz danych w celu pobrania danych.
- Za pomocą tych modułów można również manipulować danymi, np. wprowadzać, usuwać i aktualizować dane.
W przypadku pozostałych tematów zastanowimy się, jak możemy z nimi pracować MongoDB bazy danych w ramach node.jszaczynając od szybkiego porównania dwóch najpopularniejszych sposobów komunikacji MongoDB z projektu Node.js.
MongoDB Sterownik natywny kontra Mongoose w Node.js
Wymienione powyżej nazwy modułów mogą być mylące, ponieważ Node.js oferuje dwa różne sposoby komunikacji MongoDB:tubylca MongoDB kierowca i Mangusta ODM (biblioteka modelowania danych obiektowych). Każdy przykład kodu w dalszej części artykułu korzysta z natywnego sterownika, zainstalowanego wraz z npm zainstaluj mongodb i dostępne przez Klient MongoMongoose opakowuje ten sam sterownik i dodaje definicje schematów, walidację i metody modelu wielokrotnego użytku, co jest przydatne w większych aplikacjach wymagających przewidywalnej struktury danych w wielu kolekcjach. Zrozumienie różnic z góry pozwala uniknąć nieporozumień podczas instalowania pakietów lub czytania innych plików Node.js. MongoDB Przykłady online. Poniższa tabela porównuje obie opcje, aby deweloper mógł wybrać odpowiednie narzędzie do danego projektu.
| WYGLĄD | Natywny sterownik MongodB | Mangusta |
|---|---|---|
| instalacja sprzętu | npm zainstaluj mongodb | npm install mongoose |
| Wymuszanie schematu | Brak, dokumenty pozostają elastyczne | Zdefiniowane za pomocą obiektu schematu |
| Krzywa uczenia się | Niższy, bliższy surowemu MongoDB zapytania | Wyżej dodaje własną warstwę API |
| Najlepszy dla | Małe skrypty i kod wrażliwy na wydajność | Większe aplikacje ze spójnymi modelami danych |
Wskazówka: Trzymaj się natywnego sterownika, ucząc się podstaw MongoDB polecenia, a następnie przejdź do Mangusta gdy aplikacja wymaga walidacji schematu w wielu zbiorach.
Korzystanie z MongoDB i Node.js
Po wyjaśnieniu terminologii, w dalszej części artykułu używany będzie wyłącznie sterownik natywny, dokładnie tak, jak pokazano w poniższych przykładach kodu. Jak omówiono we wcześniejszym temacie, MongoDB to jedna z najpopularniejszych baz danych używanych wraz z Node.js.
W tym rozdziale pokażemy, jak nawiązać połączenie z MongoDB bazy danych i jak wykonywać normalne operacje odczytu danych z bazy danych, a także wstawiania, usuwania i aktualizowania rekordów w bazie danych. MongoDB Baza danych.
Na potrzeby tego rozdziału załóżmy, że mamy poniżej MongoDB dane na miejscu.
Nazwa bazy danych: EmployeeDB
Nazwa kolekcji: Pracownik
Documents
{
{Employeeid : 1, Employee Name : Guru99},
{Employeeid : 2, Employee Name : Joe},
{Employeeid : 3, Employee Name : Martin},
}
- Instalowanie modułów NPM
Aby uzyskać dostęp do Mongo z poziomu aplikacji Node, potrzebujesz sterownika. Dostępnych jest wiele sterowników Mongo, ale MongoDB należy do najpopularniejszych. Aby zainstalować MongoDB moduł, uruchom poniższe polecenie
npm zainstaluj mongodb
- Tworzenie i zamykanie połączenia z a MongoDB Baza danych. Poniższy fragment kodu pokazuje, jak utworzyć i zamknąć połączenie z plikiem a MongoDB Baza danych.
Code Wyjaśnienie:
- Pierwszym krokiem jest uwzględnienie MongoDB Moduł sterownika, który jest obsługiwany za pomocą funkcji require. Po zainstalowaniu tego modułu możemy użyć niezbędnych funkcji dostępnych w tym module, aby utworzyć połączenia z bazą danych.
- Następnie określamy parametry połączenia z bazą danych. W ciągu łączącym przekazywane są 3 wartości kluczy.
- Pierwszym z nich jest „mongodb”, który określa, że łączymy się z bazą danych mongoDB.
- Następnym krokiem jest „localhost”, co oznacza, że łączymy się z bazą danych na komputerze lokalnym.
- Następnym krokiem jest „EmployeeDB”, czyli nazwa bazy danych zdefiniowanej w naszym pliku MongoDB Baza danych.
- Następnym krokiem jest faktyczne połączenie się z naszą bazą danych. Funkcja connect pobiera nasze URL i ma możliwość określenia funkcji zwrotnej. Zostanie ona wywołana po nawiązaniu połączenia z bazą danych. Daje nam to możliwość sprawdzenia, czy połączenie z bazą danych powiodło się, czy nie.
- W funkcji zapisujemy do konsoli ciąg „Połączenie nawiązane” sygnalizujące, że połączenie zostało utworzone pomyślnie.
- Na koniec zamykamy połączenie za pomocą instrukcji db.close.
Jeżeli powyższy kod zostanie wykonany poprawnie, do konsoli zostanie zapisany ciąg „Connected”, jak pokazano poniżej.
- Zapytanie o dane w a MongoDB baza danych - Używając MongoDB sterownika możemy także pobrać dane z pliku MongoDB Baza danych. Poniższa sekcja pokaże, jak możemy użyć sterownika do pobrania wszystkich dokumentów z kolekcji „Pracownicy” w naszej bazie danych „Pracownicy”. Jest to kolekcja w naszej MongoDB baza danych, w której znajdują się wszystkie dokumenty związane z pracownikami. Każdy dokument ma identyfikator obiektu, nazwę pracownika i identyfikator pracownika w celu zdefiniowania wartości dokumentu.
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url, function(err, db) { var cursor = db.collection('Employee').find(); cursor.each(function(err, doc) { console.log(doc); }); });
Code Wyjaśnienie:
- W pierwszym kroku tworzymy kursor (kursor to wskaźnik służący do wskazywania różnych rekordów pobranych z bazy danych. Następnie kursor służy do iterowania po różnych rekordach w bazie danych. Definiujemy tutaj nazwę zmiennej o nazwie kursor, która będzie używana do przechowywania wskaźnika do rekordów pobranych z bazy danych), który wskazuje na rekordy pobrane z kolekcji MongoDb. Mamy również możliwość określenia kolekcji „Pracownik”, z której mają zostać pobrane rekordy. Funkcja find() służy do określenia, że chcemy pobrać wszystkie dokumenty z kolekcji MongoDb. MongoDB Kolekcja.
- Teraz iterujemy po naszym kursorze i dla każdego dokumentu w kursorze wykonamy funkcję.
- Nasza funkcja po prostu wydrukuje zawartość każdego dokumentu na konsoli.
Uwaga: - Możliwe jest również pobranie konkretnego rekordu z bazy danych. Można to zrobić, określając warunek wyszukiwania w funkcji find(). Załóżmy na przykład, że chcesz pobrać rekord, który zawiera nazwisko pracownika jako Guru99, wówczas to stwierdzenie można zapisać w następujący sposób
var cursor=db.collection('Employee').find({EmployeeName: "guru99"})
Jeśli powyższy kod zostanie wykonany poprawnie, na konsoli zostanie wyświetlony poniższy komunikat.
Wyjście:
Z wyjścia,
- Będziesz mógł wyraźnie zobaczyć, że wszystkie dokumenty z kolekcji są pobierane. Jest to możliwe dzięki użyciu metody find() połączenia mongoDB (db) i iteracji przez wszystkie dokumenty za pomocą kursora.
- Wstawianie dokumentów do kolekcji – Dokumenty można wstawiać do kolekcji za pomocą metody InsertOne udostępnianej przez MongoDB library. Poniższy fragment kodu pokazuje, jak możemy wstawić dokument do kolekcji mongoDB.
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url, function(err, db) { db.collection('Employee').insertOne({ Employeeid: 4, EmployeeName: "NewEmployee" }); });
Code Wyjaśnienie:
- Tutaj używamy metody InsertOne z MongoDB biblioteka, aby wstawić dokument do kolekcji Pracowników.
- Określamy szczegóły dokumentu dotyczące tego, co należy wstawić do kolekcji Pracownik.
Jeśli teraz sprawdzisz zawartość pliku MongoDB bazy danych, znajdziesz rekord z identyfikatorem pracownika wynoszącym 4 i nazwą pracownika „Nowy pracownik” wstawiony do kolekcji pracowników.
Uwaga: Konsola nie wyświetli żadnych wyników, ponieważ rekord jest wstawiany do bazy danych i nie można tutaj wyświetlić żadnych wyników.
Aby sprawdzić, czy dane zostały poprawnie wstawione do bazy danych, należy wykonać następujące polecenia: MongoDB
- Skorzystaj z bazy danych EmployeeDB
- db.Employee.find({Employeeid :4 })
Pierwsza instrukcja zapewnia połączenie z bazą danych EmployeeDb. Druga instrukcja wyszukuje rekord, który ma identyfikator pracownika równy 4.
- Aktualizacja dokumentów w kolekcji – Dokumenty można aktualizować w kolekcji za pomocą metody updateOne udostępnionej przez MongoDB library. Poniższy fragment kodu pokazuje, jak zaktualizować dokument w kolekcji mongoDB.
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url, function(err, db) { db.collection('Employee').updateOne({ "EmployeeName": "NewEmployee" }, { $set: { "EmployeeName": "Mohan" } }); });
Code Wyjaśnienie:
- Tutaj używamy metody „updateOne” z pliku MongoDB biblioteka służąca do aktualizacji dokumentu w kolekcji mongoDB.
- Określamy kryteria wyszukiwania, który dokument wymaga aktualizacji. W naszym przypadku chcemy znaleźć dokument, który ma nazwę pracownika „Nowy pracownik”.
- Następnie chcemy ustawić wartość EmployeeName dokumentu z „NewEmployee” na „Mohan”.
Jeśli teraz sprawdzisz zawartość pliku MongoDB bazy danych, w kolekcji Pracowników znajdziesz rekord z identyfikatorem pracownika wynoszącym 4 i nazwą pracownika „Mohan”.
Aby sprawdzić, czy dane w bazie danych zostały prawidłowo zaktualizowane, należy wykonać następujące polecenia: MongoDB
- Skorzystaj z bazy danych EmployeeDB
- db.Employee.find({Employeeid :4 })
Pierwsza instrukcja zapewnia połączenie z bazą danych EmployeeDb. Druga instrukcja wyszukuje rekord, który ma identyfikator pracownika równy 4.
- Usuwanie dokumentów w kolekcji – Dokumenty można usunąć w kolekcji za pomocą metody „deleteOne” udostępnionej przez MongoDB library. Poniższy fragment kodu pokazuje, jak usunąć dokument w kolekcji mongoDB.
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url, function(err, db) { db.collection('Employee').deleteOne( { "EmployeeName": "Mohan" } ); });
Code Wyjaśnienie:
- Tutaj używamy metody „deleteOne” z pliku MongoDB biblioteka, która służy do usuwania dokumentu w kolekcji mongoDB.
- Określamy kryteria wyszukiwania, który dokument ma zostać usunięty. W naszym przypadku chcemy znaleźć dokument, który ma nazwę pracownika „Mohan” i usunąć ten dokument.
Jeśli teraz sprawdzisz zawartość pliku MongoDB bazie danych, znajdziesz rekord z identyfikatorem pracownika wynoszącym 4 i nazwą pracownika „Mohan” usunięty z kolekcji pracowników.
Aby sprawdzić, czy dane w bazie danych zostały prawidłowo zaktualizowane, należy wykonać następujące polecenia: MongoDB
- Skorzystaj z bazy danych EmployeeDB
- db.Pracownik.find()
Pierwsza instrukcja zapewnia połączenie z bazą danych EmployeeDb. Druga instrukcja przeszukuje i wyświetla wszystkie rekordy w kolekcji pracowników. Tutaj możesz sprawdzić, czy rekord został usunięty, czy nie.
Nowoczesne Async/Await MongoDB Połączenia w Node.js
MongoClient.connect(url, wywołanie zwrotne) wzór używany w całym artykule pasuje do MongoDB Wersja sterownika Node.js, która obowiązywała w momencie pisania powyższych przykładów. Najnowsze wersje sterowników nadal obsługują ten styl wywołań zwrotnych, ale większość nowych projektów preferuje teraz obietnice i async/await, ponieważ wynikowy kod odczytuje się od góry do dołu bez zagnieżdżonych wywołań zwrotnych. Poniższe kroki przepisują to samo połączenie Employee, używając nowoczesnej składni.
- Utwórz pojedynczą instancję MongoClient poza dowolną funkcją, przekazując ciąg połączenia raz, na przykład const client = nowy MongoClient(url);
- Numer Telefonu czekaj na client.connect() wewnątrz funkcji asynchronicznej w celu otwarcia połączenia zamiast przekazywania wywołania zwrotnego.
- Pobierz bazę danych za pomocą client.db('EmployeeDB') zamiast polegać na obiekcie zwróconym w wywołaniu zwrotnym.
- Uruchom zapytania za pomocą oczekiwać, Na przykład oczekuj na db.collection('Employee').find().toArray(), która zwraca tablicę bezpośrednio, zamiast wymagać wywołania zwrotnego kursora.
- Zamknij połączenie za pomocą czekaj na zamknięcie klienta () wewnątrz bloku Finally, dzięki czemu zawsze będzie uruchamiany, nawet jeśli zapytanie zgłosi błąd.
const { MongoClient } = require('mongodb'); const url = 'mongodb://localhost:27017'; const client = new MongoClient(url); async function run() { try { await client.connect(); const db = client.db('EmployeeDB'); const employees = await db.collection('Employee').find().toArray(); console.log(employees); } finally { await client.close(); } } run().catch(console.error);
Oba style łączą się z tą samą bazą danych EmployeeDB i tą samą kolekcją Employee, więc istniejący kod oparty na wywołaniach zwrotnych nie musi być natychmiast przepisany. Oba podejścia mogą współistnieć podczas stopniowej migracji projektu, a wybór zależy głównie od tego, który z nich… MongoDB Wersja sterownika Node.js jest już przypinana w pliku package.json.
Jak zbudować aplikację ekspresową węzła za pomocą MongoDB do przechowywania i udostępniania treści
Po omówieniu obu stylów połączenia, w następnej sekcji zastosujemy klasyczny wzorzec wywołania zwrotnego w kompletnej aplikacji Express, ponieważ jest to składnia używana przez oryginalny serwer przykładowy poniżej. Budowanie aplikacji z połączeniem Express i MongoDB jest obecnie dość powszechne.
Podczas pracy z JAVASCRIPT W przypadku aplikacji internetowych powszechnie spotykamy się z terminem MEAN-Stack.
- Termin stos MEAN odnosi się do zbioru JavaTechnologie skryptowe wykorzystywane do tworzenia aplikacji internetowych.
- MEAN to skrót od MongoDB, ExpressJS, angularjsi Node.js.
Dlatego zawsze dobrze jest zrozumieć, w jaki sposób Node.js i MongoDB współpracować w celu dostarczania aplikacji, które wchodzą w interakcję z bazami danych zaplecza.
Spójrzmy na prosty przykład użycia słów „ekspresowy” i „MongoDB" razem. W naszym przykładzie wykorzystamy tę samą kolekcję Pracowników w pliku MongoDB Baza danych pracowników.
Teraz włączymy Express do wyświetlania danych na naszej stronie internetowej na żądanie użytkownika. Gdy nasza aplikacja działa w Node.js, może być konieczne przejście do URL http://localhost:3000/Employeeid.
Po uruchomieniu strony zostaną wyświetlone wszystkie identyfikatory pracowników w kolekcji Employee. Zobaczmy zatem fragment kodu w sekcjach, które pozwolą nam to osiągnąć.
Krok 1) Zdefiniuj wszystkie biblioteki, które mają zostać użyte w naszej aplikacji, czyli w naszym przypadku są to zarówno biblioteki MongoDB i biblioteka ekspresowa.
Code Wyjaśnienie:
- Definiujemy naszą bibliotekę „ekspresową”, która będzie wykorzystywana w naszej aplikacji.
- Definiujemy naszeMongoDB', która będzie wykorzystywana w naszej aplikacji do łączenia się z naszymi MongoDB Baza danych.
- Tutaj definiujemy URL naszej bazy danych, z którą chcesz się połączyć.
- Na koniec definiujemy ciąg znaków, który będzie używany do przechowywania naszej kolekcji identyfikatorów pracowników, które później będą wyświetlane w przeglądarce.
Krok 2) Na tym etapie pobierzemy teraz wszystkie rekordy z naszej kolekcji „Pracownik” i odpowiednio z nimi będziemy pracować.
Code Wyjaśnienie:
- Tworzymy trasę do naszej aplikacji o nazwie „Employeeid”. Więc ilekroć ktoś przegląda http://localhost:3000/Employeeid naszej aplikacji, zostanie wykonany fragment kodu zdefiniowany dla tej trasy.
- Tutaj pobieramy wszystkie rekordy z naszej kolekcji „Pracownik” za pomocą polecenia db.collection('Employee').find(). Następnie przypisujemy tę kolekcję do zmiennej zwanej kursorem. Za pomocą tej zmiennej kursorowej będziemy mogli przeglądać wszystkie rekordy kolekcji.
- Używamy teraz funkcji kursor.each() do poruszania się po wszystkich rekordach naszej kolekcji. Dla każdego rekordu zdefiniujemy fragment kodu opisujący, co należy zrobić w przypadku uzyskania dostępu do każdego rekordu.
- Na koniec widzimy, że jeśli zwrócony rekord nie jest nullem, to pobieramy pracownika za pomocą polecenia „item.Employeeid”. Reszta kodu to po prostu skonstruowanie poprawnego kodu HTML, który pozwoli na prawidłowe wyświetlanie naszych wyników w przeglądarce.
Krok 3) W tym kroku wyślemy nasze dane wyjściowe na stronę internetową i sprawimy, że nasza aplikacja będzie nasłuchiwać na określonym porcie.
Code Wyjaśnienie:
- W tym miejscu przesyłamy na naszą stronę całą treść, która została zbudowana we wcześniejszym kroku. Parametr „res” pozwala nam w odpowiedzi wysłać treść na naszą stronę internetową.
- Sprawiamy, że cała nasza aplikacja Node.js nasłuchuje na porcie 3000.
Wyjście:
Z wyjścia,
- Wyraźnie pokazuje, że wszystkie identyfikatory pracownika w kolekcji Employee zostały odzyskane. Dzieje się tak dlatego, że używamy tzw MongoDB sterownik, aby połączyć się z bazą danych i pobrać wszystkie rekordy pracowników, a następnie użyć „ekspresowego” do wyświetlenia rekordów.
Oto kod w celach informacyjnych
var express = require('express'); var app = express(); var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; var str = ""; app.route('/Employeeid').get(function(req, res) { MongoClient.connect(url, function(err, db) { var cursor = db.collection('Employee').find(); //noinspection JSDeprecatedSymbols cursor.each(function(err, item) { if (item != null) { str = str + " Employee id " + item.Employeeid + "</br>"; } }); res.send(str); db.close(); }); }); var server = app.listen(3000, function() {});
Uwaga: kursor.each może być przestarzały w zależności od wersji pliku MongoDB kierowca. Możesz dodać //noinspection JSDeprecatedSymbols przed kursorem.each, aby obejść problem. Alternatywnie możesz użyć forEach. Poniżej znajduje się przykładowy kod wykorzystujący forEach
var express = require('express'); var app = express(); var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; var str = ""; app.route('/Employeeid').get(function(req, res) { MongoClient.connect(url, function(err, db) { var collection = db.collection('Employee'); var cursor = collection.find({}); str = ""; cursor.forEach(function(item) { if (item != null) { str = str + " Employee id " + item.Employeeid + "</br>"; } }, function(err) { res.send(err); db.close(); } ); }); }); var server = app.listen(8080, function() {});











