Odpri spletni seminar "Osnove MongoDB"

Prijatelji, začetek novega tečaja "Baza podatkov" bo jutri, zato smo izvedli tradicionalno odprto učno uro, katere posnetek si lahko ogledate tukaj. Tokrat smo govorili o priljubljeni bazi podatkov MongoDB: preučili smo nekaj tankosti, pogledali osnove delovanja, zmogljivosti in arhitekturo. Dotaknili smo se tudi nekaterih uporabniških primerov.

Odpri spletni seminar "Osnove MongoDB"

Webinar je bil izveden Ivan Belt, vodja razvoja strežnikov pri Citymobilu.

Funkcije MongoDB

MongoDB je odprtokodni dokumentno usmerjen DBMS, ki ne zahteva opisa sheme tabele. Klasificiran je kot NoSQL in uporablja BSON (binarni JSON). Prilagodljiv takoj, napisan v C++ in podpira sintakso JavaScript. Podpore za SQL ni.

MongoDB ima gonilnike za številne priljubljene programske jezike (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby itd.). Obstajajo tudi neuradni in s strani skupnosti podprti gonilniki za druge programske jezike.

No, poglejmo osnovne ukaze, ki so lahko uporabni.

Torej, za namestitev MongoDB v Docker, 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 zgodi zagon odjemalca MongoDB:

Odpri spletni seminar "Osnove MongoDB"

Zdaj pa napišimo tradicionalno Pozdravljen, svet:

print (“Hello world!”)

Odpri spletni seminar "Osnove MongoDB"

Potem - začnimo cikel:

Odpri spletni seminar "Osnove MongoDB"

Kot ste opazili, pred nami običajni JS, in MongoDB je popoln tolmač JavaScript.

Kdaj uporabiti MongoDB?

Obstaja zgodba, da je povprečen startup v Silicijevi dolini oseba, ki je pred enim tednom odprla knjigo »HTML for Dummies«. Kateri kupček bo izbral? Strinjajte se, da je zanj zelo priročno, ko ima iz očitnih razlogov JavaScript v svojem brskalniku, Node.js teče na strežniku in JavaScript teče tudi v bazi podatkov. To je točka številka 1.

Drugič, obstaja odlična izvedba Peter Zaitsev, eden najboljših strokovnjakov za baze podatkov v Rusiji. V njej Peter govori o MySQL in MongoDB, pri čemer posebno pozornost namenja temu, kdaj in kaj je najbolje uporabiti.

Tretjič, rad bi poudaril, da je za MongoDB značilno dobro razširljivost - in to je ena ključnih lastnosti baze podatkov. Če ne veste vnaprej, kakšna bo obremenitev, je MongoDB popoln. Poleg tega podpira že pripravljene vzorce, kot je npr drobljenje и podvajanje, in vse to je narejeno precej pregledno, kar pomeni, da je zelo priročno za delo.

glede terminologija v MongoDB potem:

  • baze podatkov so baze podatkov (sheme, zbirke tabel);
  • v MongoDB obstaja nekaj takega, kot je zbirka - to je analog tabele in niza dokumentov, ki bi morali biti logično povezani;
  • dokumenti so analogni nizu.

Ustvarjanje baze podatkov in preproste poizvedbe

Če želite ustvariti bazo podatkov, jo morate samo začeti uporabljati:

use learn

Odpri spletni seminar "Osnove MongoDB"

Zdaj naredimo majhen vložek dokumenta. Naj bo to na primer samorog z imenom Aurora:

db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})

db - globalni objekt za dostop do baze podatkov, to je pravzaprav sama "monga". Uporablja se za šarding sh, za replikacijo - rs.

Katere ukaze ima predmet? db:

Odpri spletni seminar "Osnove MongoDB"

Torej, vrnimo se k našemu ukazu, zaradi česar bo konzola sporočila, da je bila vstavljena ena vrstica:

Odpri spletni seminar "Osnove MongoDB"

Beseda unicorns v ekipi db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450}) označuje zbirko. Upoštevajte, da zbirke nismo opisali ali ustvarili, ampak preprosto napisali 'samorogi', naredili vložek in dobili smo zbirko.

In tako lahko dobite vse naše zbirke:

db.getCollectionNames()

In tako naprej. Lahko vstavite še enega zbirka:

Odpri spletni seminar "Osnove MongoDB"

Zdaj pa vprašajmo popolna zbirka (opozarjamo vas, da v našem primeru baza podatkov že vsebuje informacije o dveh samorogih z istim imenom):

db.unicorns.find()

Upoštevajte, tukaj je naš JSON (tam je ime, spol, teža, nekaj edinstvenega identifikatorja predmeta):

Odpri spletni seminar "Osnove MongoDB"

Zdaj pa vstavimo še nekaj samorogov z istimi imeni:

db.unicorns.insert({name: 'Leto', gender: 'm', 
home: 'Arrakeen', worm: false}) 
db.unicorns.insert({name: 'Leto', gender: 'm', 
home: 'Arrakeen', worm: false})

In poglejmo, kaj se je zgodilo:

Odpri spletni seminar "Osnove MongoDB"

Kot lahko vidite, imamo dodatna polja: domov и črv, ki ga Aurora nima.

Dodajmo še nekaj samorogov:

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}])

Tako smo z JavaScriptom vstavili še štiri objekte:

Odpri spletni seminar "Osnove MongoDB"

V katere baze podatkov je po vašem mnenju bolj priročno shranjevati podatke o potnih listih: v relacijske baze podatkov ali Mongo?

Odgovor je očiten – v Mongi, in zgornji primer to dobro prikazuje. Ni skrivnost, da je KLADR bolečina v Ruski federaciji. In Monga se zelo dobro ujema z naslovi, ker lahko vse nastaviš kot niz in bo življenje veliko lažje. In je dober Uporabniški primer za MongoDB.

Dodajmo več samorogov:

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});

Odpri spletni seminar "Osnove MongoDB"

Zdaj bodite pozorni na dokumente. Kot boben Shranjujemo celotne predmete. Obstajajo tudi informacije o tem, kaj ljubi samorog, in nima vsak te informacije. Torej notri leži polna matrika.

Mimogrede, za lepši prikaz rezultatov lahko pokličete metodo na koncu iskalnega ukaza .pretty():

Odpri spletni seminar "Osnove MongoDB"

Če morate dobiti informacije o zadnji napaki, uporabite naslednji ukaz:

db.getLastError()

To lahko storite po vsakem vstavljanju ali pa konfigurirate Write Concern. Bolje je prebrati o tem v uradna dokumentacija, ki je, mimogrede, zelo informativen v Mongi. Mimogrede, na voljo je tudi na Habréju dober članek o tem.

Pojdimo k bolj zapletenim poizvedbam

Poizvedba za točno vrednost polja:

db.unicorns.find({gender: 'm'})

Če napišemo takšno zahtevo, bomo v izpisu konzole prejeli seznam vseh moških samorogov.

Lahko tudi storite poizvedovati po več poljih hkrati: glede na spol in težo:

Odpri spletni seminar "Osnove MongoDB"

Zgoraj bodite pozorni na posebne izbirnik $gt, ki omogoča vzrejo vseh samcev samorogov, ki tehtajo več kot 700.

Lahko preverite ali polje sploh obstaja?:

db.unicorns.find({vampires: {$exists: false}})

Ali tako:

db.unicorns.find({'parents.father': {$exists: true}})

Naslednja ekipa bo pripeljala samoroge, katerih imena se začnejo s črkama A ali a:

db.unicorns.find({name: {$regex: "^[Aa]"}})

Zdaj pa razmislimo iskanje po nizu. Vprašanje št. 1: Kaj izpiše ta ukaz:

db.unicorns.find({loves:'apple'})

Tako je: vsi, ki imate radi jabolka.

Naslednji ukaz bo vrnil samo podatke o samorogu, ki vsebujejo samo jabolka in lubenice:

db.unicorns.find({loves:[ "apple", "watermelon" ]})

In še en ukaz:

db.unicorns.find({loves:[ "watermelon", "apple" ]})

V našem primeru ne bo vrnil ničesar, saj ko podajamo matriko, se prvi element primerja s prvim, drugi z drugim itd. To pomeni, da se mora tudi matrika ujemati po položaju te vrednote.

In tako izgleda iskanje po nizu z uporabo operatorja "ALI".:

Odpri spletni seminar "Osnove MongoDB"

Naslednji primer nam bo pokazal iskanje z uporabo operatorja $all. In tukaj je zaporedje nepomembno:

Odpri spletni seminar "Osnove MongoDB"

Tudi mi lahko iskanje po velikosti polja:

Odpri spletni seminar "Osnove MongoDB"

Kaj pa, če želimo najti niz, katerega velikost je večja od ena? Za to obstaja operater $kje, s katerim lahko pišete bolj zapletene stvari:

db.unicorns.find({$where: function() { return this.loves && (this.loves.length > 1) } })

Mimogrede, če želite vaditi, tukaj si datoteka z ukazi.

Funkcije kazalca

Naj se malo oddaljimo in povemo nekaj besed o značilnostih Monge:

  • find() in druge operacije ne vrnejo podatkov - vrnejo tako imenovani "kurzor";
  • dejstvo, da vidimo podatke, ki se tiskajo, je delo tolmača.

Tipkanje db.unicorns.find brez oklepajev dobimo poziv:

Odpri spletni seminar "Osnove MongoDB"

Še naprej izpolnjujemo zahteve

Obstaja tudi operator $in:

db.unicorns.find({weight: {$in: [650, 704]}})

Odpri spletni seminar "Osnove MongoDB"

Zdaj pa se pogovorimo o posodobitvi. Na primer, spremenimo težo samoroga Rooooodles:

db.unicorns.update({name: "Roooooodles"}, {weight: 2222})

Kot rezultat naših dejanj je dokument bo popolnoma posodobljenin v njem bo ostalo samo eno določeno polje:

Odpri spletni seminar "Osnove MongoDB"

Se pravi, edina stvar, ki bo ostala za naš objekt, je teža 2222 in seveda id.

Situacijo lahko popravite z uporabo $set:

db.unicorns.update({_id: ObjectId("5da6ea4d9703b8be0089e6db")}, {$set: { "name" : "Roooooodles", "dob" : ISODate("1979-08-18T18:44:00Z"), "loves" : [ "apple" ], "gender" : "m", "vampires" : 99}})

Odpri spletni seminar "Osnove MongoDB"

Možno je tudi vrednosti povečanja:

Odpri spletni seminar "Osnove MongoDB"

In obstaja tudi upsert - kombinacija posodobitve in vstavka:

Odpri spletni seminar "Osnove MongoDB"

Evo, kako se to naredi izbor polja:

Odpri spletni seminar "Osnove MongoDB"

Odpri spletni seminar "Osnove MongoDB"

Še vedno je treba dodati nekaj besed o preskočite и omejiti:

Odpri spletni seminar "Osnove MongoDB"

Kolegi, to je vse, če želite izvedeti podrobnosti, poglej celoten video. In ne pozabite pustiti svojih komentarjev!

Vir: www.habr.com

Dodaj komentar