Prijatelji, pokretanje još jednog kursa
Održan je webinar
MongoDB karakteristike
MongoDB je DBMS otvorenog koda orijentiran na dokumente koji ne zahtijeva opis sheme tablice. Klasifikovan je kao NoSQL i koristi BSON (binarni JSON). Skalabilan iz kutije, napisan u C++ i podržava JavaScript sintaksu. Nema SQL podrške.
MongoDB ima drajvere za mnoge popularne programske jezike (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby, itd.). Postoje i nezvanični drajveri za druge programske jezike koje podržava zajednica.
Pa, pogledajmo osnovne komande koje mogu biti korisne.
Dakle, da implementirate MongoDB u Docker, mi pišemo:
docker run -it --rm -p 127.0.0.1:27017:27017
--name mongo-exp-project mongo
docker exec -it mongo-exp-project mongo
Tako se to dešava pokretanje klijenta MongoDB:
Hajde da napišemo ono tradicionalno Hello World:
print (“Hello world!”)
Nakon toga - počnimo ciklus:
Kao što ste primetili, pred nama obični JS, a MongoDB je punopravni JavaScript interpreter.
Kada koristiti MongoDB?
Postoji priča da je prosječan startup u Silicijumskoj dolini osoba koja je prije nedelju dana otvorila knjigu “HTML za lutke”. Koji će stack izabrati? Slažete se da mu je veoma zgodno kada, iz očiglednih razloga, ima JavaScript u svom pretraživaču, Node.js radi na serveru, a JavaScript takođe radi u bazi podataka. Ovo je tačka broj 1.
Drugo, postoji
Treće, želio bih da naglasim da MongoDB karakteriše dobro skalabilnost - a ovo je jedna od ključnih karakteristika baze podataka. Ako ne znate unaprijed koliko će biti opterećenje, MongoDB je savršen. Osim toga, podržava gotove obrasce kao što su shading и replikacija, a sve je to urađeno prilično transparentno, odnosno vrlo je zgodno za rad.
Što se tiče terminologija u MongoDB onda:
- baze podataka su baze podataka (šeme, zbirke tabela);
- u MongoDB postoji takva stvar kao zbirka - ovo je analog tabele i skupa dokumenata koji bi, logično, trebali biti povezani;
- dokumenti su analogni nizu.
Kreiranje baze podataka i jednostavni upiti
Da biste kreirali bazu podataka, trebate je samo početi koristiti:
use learn
Sada napravimo mali umetak dokumenta. Neka to bude, na primjer, jednorog po imenu Aurora:
db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
db - globalni objekat za pristup bazi podataka, odnosno, u stvari, sama „monga“. Koristi se za šarding sh, za replikaciju - rs.
Koje komande ima objekat? db:
Dakle, vratimo se našoj komandi, kao rezultat toga, konzola će prijaviti da je umetnuta jedna linija:
Reč unicorns
u timu db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
označava kolekciju. Napominjemo da nismo opisali niti kreirali kolekciju, već smo jednostavno napisali 'jednoroze', napravili insert i imali smo kolekciju.
I ovako možemo nabavite sve naše kolekcije:
db.getCollectionNames()
I tako dalje. Može ubacite još jednu kolekcija:
Sada da pitamo kompletna kolekcija (podsjećamo da u našem slučaju baza podataka već sadrži informacije o dva jednoroga s istim imenom):
db.unicorns.find()
Imajte na umu, ovdje je naš JSON (postoji ime, spol, težina, neki jedinstveni identifikator objekta):
Sada ubacimo još par jednoroga sa istim imenima:
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
I da vidimo šta se desilo:
Kao što vidite, imamo dodatna polja: kući и crv, koju Aurora nema.
Dodajmo još nekoliko jednoroga:
db.unicorns.insertMany([{name: 'Horny', dob: new Date(1992,2,13,7,47), loves: ['carrot','papaya'], weight: 600, gender: 'm', vampires: 63},
{name: 'Aurora', dob: new Date(1991, 0, 24, 13, 0), loves: ['carrot', 'grape'], weight: 450, gender: 'f', vampires: 43},
{name: 'Unicrom', dob: new Date(1973, 1, 9, 22, 10), loves: ['energon', 'redbull'], weight: 984, gender: 'm', vampires: 182},
{name: 'Roooooodles', dob: new Date(1979, 7, 18, 18, 44), loves: ['apple'], weight: 575, gender: 'm', vampires: 99}])
Dakle, ubacili smo još četiri objekta koristeći JavaScript:
Po vašem mišljenju, u kojim je bazama podataka pogodnije čuvati podatke o pasošu: relacijske baze podataka ili Mongo?
Odgovor je očigledan - u Mongi, a gornji primjer to dobro pokazuje. Nije tajna da je KLADR muka u Ruskoj Federaciji. I Monga se jako dobro uklapa sa adresama, jer sve možete postaviti kao niz i život će biti mnogo lakši. I to je dobro Slučaj korisnika za MongoDB.
Dodajmo još jednoroga:
db.unicorns.insert({name: 'Solnara', dob: new Date(1985, 6, 4, 2, 1), loves:['apple', 'carrot', 'chocolate'], weight:550, gender:'f', vampires:80});
db.unicorns.insert({name:'Ayna', dob: new Date(1998, 2, 7, 8, 30), loves: ['strawberry', 'lemon'], weight: 733, gender: 'f', vampires: 40});
db.unicorns.insert({name:'Kenny', dob: new Date(1997, 6, 1, 10, 42), loves: ['grape', 'lemon'], weight: 690, gender: 'm', vampires: 39});
db.unicorns.insert({name: 'Raleigh', dob: new Date(2005, 4, 3, 0, 57), loves: ['apple', 'sugar'], weight: 421, gender: 'm', vampires: 2});
db.unicorns.insert({name: 'Leia', dob: new Date(2001, 9, 8, 14, 53), loves: ['apple', 'watermelon'], weight: 601, gender: 'f', vampires: 33});
db.unicorns.insert({name: 'Pilot', dob: new Date(1997, 2, 1, 5, 3), loves: ['apple', 'watermelon'], weight: 650, gender: 'm', vampires: 54});
db.unicorns.insert({name: 'Nimue', dob: new Date(1999, 11, 20, 16, 15), loves: ['grape', 'carrot'], weight: 540, gender: 'f'});
db.unicorns.insert({name: 'Dunx', dob: new Date(1976, 6, 18, 18, 18), loves: ['grape', 'watermelon'], weight: 704, gender: 'm', vampires: 165});
Sada obratite pažnju na dokumente. As dob Čuvamo čitave predmete. Postoje i informacije o tome šta jednorog voli, a nemaju svi tu informaciju. Dakle, unutarnje laži puni niz.
Usput, da biste ljepše prikazali rezultate, možete pozvati metodu na kraju komande pretraživanja .pretty()
:
Ako treba da dobijete informacije o najnovijoj grešci, koristite sljedeću naredbu:
db.getLastError()
To se može učiniti nakon svakog umetanja, ili možete konfigurirati Write Concern. Bolje je pročitati o tome u
Pređimo na složenije upite
Upit za tačnu vrijednost polja:
db.unicorns.find({gender: 'm'})
Pisanjem takvog zahtjeva, dobićemo listu svih muških jednoroga u izlazu konzole.
Možete i vi upit na nekoliko polja odjednom: po spolu i po težini:
Iznad, obratite pažnju na posebnost $gt selektor, što vam omogućava da uzgajate sve muške jednoroge težine više od 700.
Možete provjeriti da li polje uopšte postoji?:
db.unicorns.find({vampires: {$exists: false}})
Ili tako:
db.unicorns.find({'parents.father': {$exists: true}})
Sljedeći tim će iznijeti jednoroge, čija imena počinju slovima A ili a:
db.unicorns.find({name: {$regex: "^[Aa]"}})
Sada razmislite pretraživanje niza. Pitanje #1: Šta će ova naredba proizvesti:
db.unicorns.find({loves:'apple'})
Tako je: svi koji vole jabuke.
Sljedeća naredba će vratiti samo one unicorn podatke koji sadrže samo jabuke i lubenice:
db.unicorns.find({loves:[ "apple", "watermelon" ]})
I još jedna komanda:
db.unicorns.find({loves:[ "watermelon", "apple" ]})
U našem slučaju, neće vratiti ništa, jer kada prođemo niz, prvi element se poredi sa prvim, drugi sa drugim itd. To jest, niz se takođe mora podudarati po poziciji ove vrednosti.
A ovako to izgleda pretražujući niz koristeći "OR" operator:
Sljedeći primjer će nam pokazati pretražite koristeći $all operator. I ovdje je redoslijed nebitan:
Takođe možemo traži po veličini niza:
Ali šta ako želimo pronaći niz čija je veličina veća od jedan? Za ovo postoji operater $gdje, sa kojim možete napisati složenije stvari:
db.unicorns.find({$where: function() { return this.loves && (this.loves.length > 1) } })
Inače, ako želiš da vežbaš,
Funkcije kursora
Hajdemo malo da odstupimo i kažemo nekoliko riječi o karakteristikama Monge:
- find() i druge operacije ne vraćaju podatke - one vraćaju takozvani “kursor”;
- činjenica da vidimo da se podaci štampaju je delo tumača.
Tipkanje db.unicorns.find bez zagrada, dobijamo prompt:
Nastavljamo sa ispunjavanjem zahtjeva
Tu je i operator $in:
db.unicorns.find({weight: {$in: [650, 704]}})
A sada razgovarajmo o ažuriranju. Na primjer, promijenimo težinu jednoroga Rooooodles:
db.unicorns.update({name: "Roooooodles"}, {weight: 2222})
Kao rezultat naših akcija, dokument bit će potpuno ažurirana, a u njemu će ostati samo jedno navedeno polje:
Odnosno, jedino što će ostati našem objektu je težina 2222 i, naravno, id.
Situaciju možete ispraviti koristeći $set:
db.unicorns.update({_id: ObjectId("5da6ea4d9703b8be0089e6db")}, {$set: { "name" : "Roooooodles", "dob" : ISODate("1979-08-18T18:44:00Z"), "loves" : [ "apple" ], "gender" : "m", "vampires" : 99}})
Postoji i mogućnost vrijednosti prirasta:
I postoji također upsert - kombinacija ažuriranja i umetanja:
Evo kako se to radi izbor polja:
Ostaje dodati nekoliko riječi o Skip и granica:
Kolege, to je sve, ako želite da znate detalje,
izvor: www.habr.com