Osnovni uvodni tutorijal za MongoDB
Osnovni uvodni tutorijal za MongoDB
Mislio sam da MongoDB veoma dobro poznajem — dok nisam sreo intervjuera iz ByteDance-a.
Ponekad prosto moraš da uzdahneš: prelazak sistema na novu verziju zaista donosi mnogo koristi — ne samo da mi je dao priliku da preuredim onaj loš kôd od ranije, već je zadovoljio i moju taštinu da učim. Eto, ušao sam u Redis, ušao sam u Elasticsearch, a sada ulazim i u MongoDB — dok ćelavim, istovremeno postajem i moćniji.

Pre nego što nastavite sa čitanjem, moram da naglasim jednu stvar: MongoDB nisam istraživao neki posebno duboko, učim ga prosto zato što mi treba. Ali, kao odgovoran tehnički bloger, uložio sam srce i trud, i siguran sam da ćete, pošto pročitate ovaj uvodni tutorijal, biti zadovoljni i neizdrživo poželeti da ga lajkujete.
Naravno, ako u tekstu naiđete na greške, nemojte biti blagi — slobodno možete doći u grupi da me izbodete, ali pod jednim uslovom: nemojte me udarati po licu, plašim se da mi se naruši izgled.
01. Šta je MongoDB
MongoDB je baza podataka zasnovana na distribuiranom skladištu fajlova, sa ciljem da web aplikacijama pruži skalabilno i visoko-performantno rešenje za skladištenje podataka.
Gornji citat preuzet je iz zvaničnog sajta — mora se priznati, zvuči pomalo učeno. Zato ću vam preformulisati u jedan razgovorniji oblik: MongoDB podatke skladišti kao dokument (slično JSON objektu), a strukturu podataka čine parovi ključ-vrednost, slično kao Map u Javi. Pošto se do njih dolazi preko ključa (key), pristup je znatno efikasniji — zar ne? I to je ujedno i najvažnija odlika MongoDB-a.
MongoDB izlazi u enterprise verziji (sa jačim mogućnostima) i u community verziji; za nas programere, community verzija je sasvim dovoljna za učenje i upotrebu. MongoDB ima mnogo drajver paketa koji pokrivaju sve uobičajene programske jezike, poput Jave, JavaScripta, C++, C#, Python-a itd.
Mnoge poznate internet kompanije koriste MongoDB — na primer Google, Facebook, eBay itd. Ukratko, vredi mu verovati, pa slobodno uđite u njega; dodatno znanje nikada ne šteti, iskoristite ovo kao još jednu priliku za učenje.
02. Instalacija MongoDB-a
MongoDB za različite operativne sisteme nudi različite instalacione pakete; u ovom uvodnom članku uzećemo za primer Windows.

Zvanična adresa za preuzimanje je:
https://www.mongodb.com/download-center/community
Najsvežija verzija je 4.2.6. Izabrao sam instalacionu verziju, u msi formatu, veličine oko 264 MB. Kada se preuzme, dvokliknite da pokrenete instalaciju — potpuno je „dalje, dalje, dalje" proces.
Preporučujem da izaberete „Custom" prilagođenu instalaciju, kao na slici ispod.

Pokrenite je u servisnom režimu i podesite direktorijume za podatke i logove, kao na slici ispod.

Savetujem da odkliknete instalaciju grafičkog klijentskog alata za MongoDB, jer bi vas inače brzina instalacije naterala da se prebacite na tračanje po telefonu.

Kada se instalacija završi, uđite u bin direktorijum i dvokliknite na fajl mongo.exe — time ćete se povezati na MongoDB servis.

Podrazumevani port MongoDB-a je 27017.
Verzija MongoDB-a je 4.2.6.
Podrazumevano se povežete na „test" dokument (što odgovara bazi), što možete proveriti komandom db.

Možete izvršavati i neke jednostavne aritmetičke operacije:

A kako zaustaviti servis? Možete direktno kliknuti na X u gornjem desnom uglu — grubo, ali efikasno.
03. Instalacija Robo 3T
Robo 3T pruža podršku za MongoDB i SCRAM-SHA-256 (unapređeni mongo shell), i to je laki MongoDB klijentski alat.
Adresa za preuzimanje je:
https://robomongo.org/download
Najsvežija verzija je 1.3. Izaberite zip format za preuzimanje, veličine oko 23 MB. Pošto ga preuzmete, samo ga raspakujte.

Sadržaj direktorijuma neću redom objašnjivati; uđite u bin direktorijum, dvokliknite na fajl robo3t.exe i pokrenite Robo 3T klijent.

Kliknite na „Create" da biste kreirali vezu ka MongoDB-u.

Kada se veza uspešno uspostavi, možete raditi sa MongoDB-om.

(Iako, u ovom trenutku drugovi i ne znaju baš najbolje kako da ga koriste — jer još uvek nisu jasni neki od ključnih koncepata MongoDB-a, pa bukvalno ne znaju odakle da krenu.)
04. Ključni koncepti MongoDB-a
Sa eksplozivnim razvojem interneta, korisnički podaci postaju sve masovniji, a razvoj NoSQL baza omogućava dobru obradu takvih velikih podataka; MongoDB je jedan od tipičnih predstavnika NoSQL baza.
Ovde, neki drugovi možda još uvek ne znaju šta znači NoSQL, pa ću ukratko objasniti. NoSQL ne znači „bez SQL-a“; prava značenje mu je „Not Only SQL“, odnosno „ne samo SQL“, i odnosi se na nerelacione baze podataka, što je drugačije od klasičnih relacionalnih baza kao što su MySQL i Oracle.
Ime MongoDB potiče od engleske reči „humongous", što znači „ogroman“ — iz čega se nazire i ambicija MongoDB-a. Podaci u MongoDB-u skladište se u obliku binarnog dokumenta sličnog JSON formatu:
{
name: "Chenmo Wang Er",
age: 18,
hobbies: ["pisanje", "kucanje koda"]
}Pre nego što pređemo na sledeći korak, treba da razumemo nekoliko ključnih koncepata u MongoDB-u — na primer, šta je kolekcija (collection), šta je dokument (document), šta je polje (field) itd. Iako je MongoDB nerelaciona baza, ona je po konceptima veoma slična relacionim bazama.

Kada pogledate gornju sliku (preuzetu iz članka mog dobrog prijatelja macrozheng-a), nije li vam odmah sve kristalno jasno?
05. Korišćenje MongoDB-a u Javi
Neki drugovi možda pitaju: „Erge, ja sam Java programer, kako da koristim MongoDB u Javi?" Odlično pitanje — evo odmah, evo odmah.
Prvi korak: dodajte u projekat zavisnost MongoDB drajvera:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.0.3</version>
</dependency>Drugi korak: napravite test klasu MongoDBTest:
public class MongoDBTest {
public static void main(String[] args) {
MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("test");
Document doc = new Document("name", "Chenmo Wang Er")
.append("age", "18")
.append("hobbies", Arrays.asList("pisanje", "kucanje koda"));
collection.insertOne(doc);
System.out.println("Veličina kolekcije: " + collection.countDocuments());
Document myDoc = collection.find().first();
System.out.println("Sadržaj dokumenta: " + myDoc.toJson());
}
}MongoClientje objekat veze klijenta koji pruža MongoDB; ako se ne navede ime hosta i broj porta, podrazumevano je „localhost“ i „27017“.
Ako želite da prilagodite ime hosta i port, to možete uraditi i u obliku stringa:
MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");Da li vam deluje pomalo slično stringu veze za MySQL?
Metoda
getDatabase()služi za dobijanje baze sa zadatim imenom: ako baza već postoji, vraća taj DB objekat (MongoDatabase); ako ne postoji, kreira je pa onda vraća (štedi proveru na prazno — veoma „humano").Metoda
getCollection()služi za dobijanje kolekcije dokumenata sa zadatim imenom: ako kolekcija već postoji, vraća taj kolekcijski objekatDocument; ako ne postoji, kreira je pa onda vraća (slično kao metodagetDatabase()).
Kada imamo kolekcijski objekat (MongoCollection<Document>), u njega možemo dodavati konkretan sadržaj dokumenata.
Document doc = new Document("name", "Chenmo Wang Er")
.append("age", "18")
.append("hobbies", Arrays.asList("pisanje", "kucanje koda"));Klasa Document dolazi iz paketa org.bson; nakon što se instancira, preko metode append() joj se dodaju odgovarajući parovi ključ-vrednost, što je veoma zgodno — baš kao metoda append() klase String.
Kada imamo objekat dokumenta, preko metode insertOne() dokument možemo dodati u kolekciju.
Metoda
countDocuments()služi za dobijanje broja dokumenata u kolekciji.Za pretragu dokumenata koristi se metoda
find(), koja vraća objekatFindIterable; metodafirst()može vratiti prvi dokument u tekućoj kolekciji.
Hajde da vidimo i izlaz programa:
Veličina kolekcije: 1
Sadržaj dokumenta: {"_id": {"$oid": "5ebcaa76465cab3f18b93e1a"}, "name": "Chenmo Wang Er", "age": "18", "hobbies": ["pisanje", "kucanje koda"]}Potpuno u skladu sa očekivanjima — savršeno (perfect)!
Možete i preko Robo 3T pregledati bazu „mydb“ — rezultat je kao na slici ispod.

06. Zahvalnica
To je to, dragi moji drugovi — to je ceo sadržaj ovog članka. Zar ne želite odmah da probate MongoDB u praksi? Samo napred, krenite! Ako u toku učenja naiđete na problem, slobodno se obratite — iako sam i ja početnik, bar imam veliki elan.
Inače, ako ikada budete želeli da napišete uvodni članak, ovaj tekst vam može poslužiti kao najbolji uzor.
