Jakiś czas temu pisałam o SQL wspominając o różnych bazach SQL (wpis: kurs SQL w 60 minut), jednak zupełnie został pominięty temat baz nierelacyjnych NoSQL (non SQL). Dzisiaj mam dla was kilka podstawowych informacji na temat MongoDB, najpopularniejszej z baz NoSQL.
MongoDB is a document database designed for ease of development and scaling
Tak przedstawia nam MongoDB oficjalna dokumentacja już we wstępie i faktycznie jest to w pigułce zebrana informacja czym MongoDB jest.
Plan na dziś
- Co to jest MongoDB?
- Instalacja MongoDB
- Praca z konsolą MongoDB
- Podstawowe polecenia
- Materiały do nauki
Co to jest MongoDB?
MongoDB to nierelacyjna baza danych oparta na dokumentach, powszechna dzięki swojej prostej strukturze bazującej na formacie JSON oraz ze względu na możliwość łatwego skalowania w poziomie zwłaszcza dla dużych zbiorów danych. MongoDB jest napisane w C++.
Pojedyńczy wiersz w bazie MongoDB ma strukturę dokumentu, złożoną z par klucz – wartość. Dokumenty MongoDB są podobne do obiektów JSON. Wartości mogą zawierać inne dokumenty, tablice i tablice dokumentów.
Instalacja MongoDB
Zanim przejdziemy dalej, musimy w ogóle zainstalować MongoDB na naszym komputerze
Instalacja MongoDB Windows
1. Pobranie instalatora
Aby zainstalować MongoDB na naszym komputerze wchodzimi na stronę www.mongodb.com/try/download/, wybieramy instalację wersji Community Server i pobieramy paczkę odpowiednią dla naszego systemu (prawidłowa paczka jest wybrana automatycznie – Windows 10 msi).
W moim wypadku najnowsza wersja to 4.4.2, jednak oczywiście w momencie, gdy będziecie czytać ten wpis może być już dostępna wersja z wyższym numerem.
2. Instalacja MongoDB krok po kroku
Dalej prowadzi nas instalator. Po drodze mamy do wyboru opcję Complete lub Custom (ta opcja pozwala wybrać, które części oprogramowania instalujemy oraz niestandardową ścieżkę instalacji Mongo). Ja zostaję przy domyślnej opcji – Complete.
Zostawiamy też zaznaczoną opcję MongoDB as a Windows service.
W kolejnym kroku można odznaczyć Install MongoDB Compass, który jest graficznym intefejsem do MongoDB – dostarcza edytor i wizualne narzędzie do manipulacji oraz analizy danych. W razie potrzeby, w każdej chwili możemy go doinstalować.
Przechodzimy dalej i pozwalamy na instalację.
3. Uruchomienie MongoDB
MongoDB zainstaluje się w domyślnym katalogu czyli Program Files.
W moim wypadku jest to: Dysk C: > Program Files > MongoDB.
Szukamy pliku mongo.exe, znajduje się on w katalogu instalacji:
Dysk lokalny > Program Files > MongoDB > Server > 4.x > bin
Po kliknięciu na plik mongo.exe powinno uruchomić się okno wiersza poleceń, powłoka z informacją o połączeniu do MongoDB:
W tym momencie możemy już korzystać z konsoli MongoDB np. wykonać polecenie db.help()
z pomocnymi komendami mongo.
4. Dodaj MongoDB do zmiennych środowiskowych
Nie możemy jednak korzystać z mongo z dowolnego miejsca na komputerze. Jeśli teraz wyszukam wiersz poleceń windows (cmd) i wpiszę polecenie mongo, to dostanę informację, że taka komenda nie istnieje.
Tylko przez kliknięce w plik mongo.exe w odpowiednim katalogu uruchamiamy klienta MongoDB. Nie jest to zbyt wygodne, dlatego chcemy (podobnie jak w Pythonie i wielu instalacjach) dodać mongo
do zmiennych systemowych (dodać do PATH’a 😉 ).
Wyszukaj i Edytuj zmienne środowiskowe systemu (Edit system environment variables). W zakładce Zaawansowane na samym dole kliknij Zmienne środowiskowe…
W tym miejscu wybieramy zmienną Path i opcję Edytuj…
Otworzy nam się nowe okno. Wybieramy Nowy i dodajemy ścieżkę do folderu bin dla MongoDB. Możemy albo ją wkleić, albo wybrać z boku Przeglądaj… i wyklikać odpowiednie miejsce.
U mnie:
C:\Program Files\MongoDB\Server\4.4\bin
Nie zapomnij zatwierdzić wszystkiego – OK.
Teraz po otwarciu nowego okna wiersza poleceń i wpisaniu mongo
uruchomi nam się powłoka MongoDB. Możemy ją zamknąć i przejść w tryb „zwykłej” konsoli za pomocą skrótu Ctrl + C
Instalacja MongoDB MacOS
Instalujemy zgodnie z instrukcją w dokumentacji. Skorzystamy z narzędzia homebrew (jeśli nie masz homebrew zacznij od jego instalacji).
Otwórz aplikację Terminal lub iTerm.
Zainstaluj MongoDB Community Edition za pomocą brew
w 2 komendach:
brew tap mongodb/brew
następnie:
brew install mongodb-community
MongoDB zostało zainstalowane na Twoim komputerze.
Uruchomienie mongodb
brew services run mongodb-community
lub
brew services start mongodb-community
MongoDB uruchomi się jako usługa w tle. Oto, co zobaczysz:
$ brew services start mongodb/brew/mongodb-community ==> Successfully started `mongodb-community` (label: homebrew.mxcl.mongodb-community)
Ponowne wykonanie tej komendy zwróci informację, że instancja mongo jest już uruchomiona, ale zawsze możemy sprawdzić listę działających serwisów za pomocą komendy:
brew services list
Przy mongodb-community powinen pojawić się status started.
Jaka jest różnica między run
a start
?
Komenda start
uruchamia usługę, w tym wypadku MongoDB, wraz zalogowaniem komputera, podczas gdy run
to jednorazowe uruchomienie. Aby zakończyć pracę danej usługi nalezy wykonać komendę
brew services stop mongodb-community
Instalacja MongoDB Linux
W zależności od dystrybucji Linuxa w dokumentacji znajduje się osobna instrukcja. Różnice są niewielkie, jednak warto przejść oficjalną instalację https://docs.mongodb.com/manual/installation/#mongodb-community-edition-installation-tutorials lub spojrzeć na YT 😉
Korzystanie z konsoli mongo
Jeśli MongoDB jest uruchomione, mamy dostęp do konsoli Mongo. Wystarczy wpisać komendę:
mongo
Aby wyjść z konsoli Mongo użyj skrótu klawiszowego Ctrl + C.
Sprawdź, że MongoDB działa prawidłowo
Po uruchomieniu konsoli w terminalu wyświetla się kilka początkowych informacji. Komenda mongo
sprawia, że łączymy się do lokalnie uruchomionej instancji MongoDB – wersja powłoki, adres uruchomienia instancji – localhost (127.0.0.1) oraz port (domyślny port uruchomienia to 27017), id sesji i wersja serwera.
Jeśli później w trakcie pracy, będziemy chcieli szybko sprawdzić wersję klienta MongoDB na jakiej pracujemy. Wystarczy wykonać polecenie db.version()
.
Komend jest oczywiście wiele, wiele więcej.
Podstawowe polecenia
Będząc w konsoli mongo możemy sprawdzić listę dostępnych komend klienta MongoDB. Wpisz db.help()
. Wynikiem będzie długa lista dostępnych instrukcji, które są zrozumiałe dla MongoDB:
Możemy sprawdzić z jakiej bazy aktualnie korzystamy prostą komendą db
. Wynik będzie następujący:
> db test
Naszą startową bazą jest baza o nazwie test.
Możemy też sprawdzić statystyki dotyczące serwera MongoDB. Wpisz polecenie db.stats()
, aby zobaczyć nazwę bazy danych, liczbę kolekcji i dokumentów w naszej bazie danych.
Na początku pierwszą i ale nie jedyną bazą będzie baza test, a w statystykach prawie wszystkie wartości będą ustawione na 0.
Aby wyświetlić listę aktualnie dostępnych baz należy wykonać polecenie show dbs
.
Dodanie danych testowych
Tak jak wspomniałam w bazie mamy kolekcje. Kolekcje zawierają dokumenty, jednak nie musimy mieć narzuconej struktury, wręcz jeśli jej nie zdefiniujemy, to takiej struktry nie ma, dlatego możemy do bazy wrzucić dowolne dane. Np.
db.test.save( { hello: "world" } )
Zostanie zapisana para klucz-wartość.
Wyświetlmy więc zawartość kolekcji komendą db.collectionName.find()
:
db.test.find()
W wyniku zobaczymy „_id” wskazujący na ObjectId wraz z zawartością naszą parą klucz-wartość.
Super nasza baza MongoDB jest prawidłowo zainstalowana. Możesz ruszać dalej z nauką.
Materiały do nauki
Kilka moich propozycji materiałów do nauki od podstaw. Materiały darmowe lub płatne, ale tanie 😉
➔ Darmowy kurs MongoDB Data Wrangling od Udacity (jest kurs udostępniony za darmo w ramach ze ścieżki Data Analyst Nanodegree)
➔ Kurs MongoDB 101 od Academy 3T jest darmowy w zakresie podstawowym. W części zaawansowanej nie wszystko dostępne za darmo.
➔ Wideo kurs MongoDB na Udemy The Complete Developer Guide, jedyny płatny z listy, ale kompleksowy i tani (ok. 10$). Jeśli natomiast interesuje was Mongo + Node.js to również na Udemy dostępny jest kurs Node.js, Express, MongoDB & More.
Materiałów do nauki jest ogromna ilość…Tego nie da sie czasami ogarnąć. Sugerujesz jakiś sposób?
MongoDB zawsze sprawiało mi problemy. Obok SQL to jeden z trudniejszych tematów do ogarnięcia.
Znalazłam Twój blog tydzień temu – szukając informacji o jajkach xDD. Potem zauważyłam zakładkę programowanie i utonęłam w artykule, gdzie się uczyć pythona. Mam nawet zapisaną zakładkę, aby wrócić tu po sesji 😉
Dzisiaj szukałam informacji o stronach na githubie – pierwszy link i znowu do Ciebie 😀 Wchodzę na główną a tu najnowszy post o MongoDB – dzisiejszy wykład. Myślę, że jeszcze nie raz tutaj wtrafię.
Materiały masz wspaniałe (dzięki wielkie za rozpisanie jak co instalować na Maca – rzadko to się zdarza). Dziękuję <3
Jest sporo materiałów do nauki MongoDB i noSQL, tylko trzeba się przyłożyć
a rozwiniesz trochę temat? Zalety i wady w por do relacyjnych, zastosowania itd?
Kiedyś rozwinę 😉 Natomiast, jeśli chodzi o nierelacyjne nigdy nie używałam MongoDB do większych projektów, raczej jako dodatkową bazę wspierającą a nie główną, więc musiałabym zasięgnąć opinii znajomych, którzy z samym MongoDB mieli więcej styczności. Pomyślę o czymś takim z bazami AWSowymi – DynamoDB i QLDB, jednak wydaje mi się, że musiałabym zrobić dobre wprowadzenie po polsku (szczególnie do tej drugiej), by w ogóle przedstawić różnice w podejściu do myśleniu o zapytaniach
A ja jako stary SQL-owiec nie bardzo widzę sens tych całych baz No-SQL, wolę moje stare dobre tabele z relacjami 🙂 . Czy możesz przybliżyć w jakimś artykule ich zastosowania, najlepiej z przykładami?
Interesuje mnie rozwój kariery w kierunku analizy danych – podstawy Pythona poznałem dzięki Twojej stronie, później zacząłem szukać czegoś więcej, robię trochę kursów na Udemy i ćwiczę, ćwiczę, ćwiczę 🙂 Ale już kolejny raz spotykam się z opinią, także u Ciebie na blogu, że Data Scientist powinien znać bazy No-SQL. Ale powinien, bo tak, bo moda 🙂 – czy są jakieś konkretne ich zastosowania, których ja, na początku drogi, nie dostrzegam?
I chętnie też poczytałbym o zastosowaniu Pythona do współpracy z bazami Mongo czy DynamoDB 😀
A tak w ogóle, Twój blog to kawał dobrej roboty, szkoda tylko, że artykuły ukazują się tak rzadko. Ale zapewne to brak czasu…