Prijatelji, začetek novega tečaja
Webinar je bil izveden
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:
Zdaj pa napišimo tradicionalno Pozdravljen, svet:
print (“Hello world!”)
Potem - začnimo cikel:
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
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
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:
Torej, vrnimo se k našemu ukazu, zaradi česar bo konzola sporočila, da je bila vstavljena ena vrstica:
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:
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):
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:
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:
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});
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()
:
Č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
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:
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".:
Naslednji primer nam bo pokazal iskanje z uporabo operatorja $all. In tukaj je zaporedje nepomembno:
Tudi mi lahko iskanje po velikosti polja:
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,
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:
Še naprej izpolnjujemo zahteve
Obstaja tudi operator $in:
db.unicorns.find({weight: {$in: [650, 704]}})
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:
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}})
Možno je tudi vrednosti povečanja:
In obstaja tudi upsert - kombinacija posodobitve in vstavka:
Evo, kako se to naredi izbor polja:
Še vedno je treba dodati nekaj besed o preskočite и omejiti:
Kolegi, to je vse, če želite izvedeti podrobnosti,
Vir: www.habr.com