Ava veebiseminar "MongoDB põhitõed"

Sõbrad, järjekordne kursuse algus "Andmebaas" toimub homme, seega tegime traditsioonilise avatud tunni, mille salvestust saate vaadata siin. Seekord rääkisime populaarsest MongoDB andmebaasist: uurisime mõningaid peensusi, vaatasime töö põhitõdesid, võimalusi ja arhitektuuri. Samuti käsitlesime mõnda kasutajajuhtumit.

Ava veebiseminar "MongoDB põhitõed"

Veebiseminar peeti Ivan Vöö, Citymobili serveriarenduse juht.

MongoDB funktsioonid

MongoDB on avatud lähtekoodiga dokumendile orienteeritud DBMS, mis ei nõua tabeliskeemi kirjeldust. See on klassifitseeritud NoSQL-iks ja kasutab BSON-i (binaarne JSON). Karbist välja skaleeritav, kirjutatud C++ keeles ja toetab JavaScripti süntaksit. SQL-i tugi puudub.

MongoDB-l on draiverid paljude populaarsete programmeerimiskeelte jaoks (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby jne). Teiste programmeerimiskeelte jaoks on olemas ka mitteametlikud ja kogukonna toetatud draiverid.

Vaatame põhikäsklusi, mis võivad olla kasulikud.

Niisiis, MongoDB juurutamiseks Dockeris, kirjutame:

docker run -it --rm -p 127.0.0.1:27017:27017 
--name mongo-exp-project mongo
docker exec -it mongo-exp-project mongo

Nii see juhtub kliendi käivitamine MongoDB:

Ava veebiseminar "MongoDB põhitõed"

Nüüd kirjutame traditsioonilise Tere maailm:

print (“Hello world!”)

Ava veebiseminar "MongoDB põhitõed"

Pärast seda - alustame tsüklit:

Ava veebiseminar "MongoDB põhitõed"

Nagu märkasite, enne meid tavaline JS, ja MongoDB on täieõiguslik JavaScripti tõlk.

Millal MongoDB-d kasutada?

On lugu, et Silicon Valley keskmine startup on inimene, kes avas nädal tagasi raamatu “HTML for Dummies”. Millise stäki ta valib? Nõus, et tema jaoks on väga mugav, kui tal on ilmselgetel põhjustel brauseris JavaScript, serveris töötab Node.js ja andmebaasis töötab ka JavaScript. See on punkt number 1.

Teiseks on olemas suurepärane esitus Peter Zaitsev, üks parimaid andmebaasispetsialiste Venemaal. Selles räägib Peter MySQL-ist ja MongoDB-st, pöörates erilist tähelepanu sellele, millal ja mida on kõige parem kasutada.

Kolmandaks tahaksin rõhutada, et MongoDB-d iseloomustab hea skaleeritavus - ja see on üks andmebaasi põhifunktsioone. Kui te ei tea ette, milline on koormus, on MongoDB ideaalne. Lisaks toetab see karbist väljas olevaid mustreid nagu killustamine и replikatsioon, ja kõik see on tehtud üsna läbipaistvalt, see tähendab, et seda on väga mugav töötada.

suhtes terminoloogia MongoDB-s siis:

  • andmebaasid on andmebaasid (skeemid, tabelikogud);
  • MongoDB-s on selline asi nagu kollektsioon - see on tabeli ja dokumentide komplekti analoog, mis loogiliselt tuleks ühendada;
  • dokumendid on analoogsed stringiga.

Andmebaasi loomine ja lihtsad päringud

Andmebaasi loomiseks peate lihtsalt hakkama seda kasutama:

use learn

Ava veebiseminar "MongoDB põhitõed"

Nüüd teeme dokumendist väikese vahetüki. Olgu selleks näiteks ükssarvik nimega Aurora:

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

db - globaalne objekt andmebaasile juurdepääsuks, see on tegelikult "monga" ise. Kasutatakse purustamiseks sh, replikatsiooniks - rs.

Millised käsud on objektil? db:

Ava veebiseminar "MongoDB põhitõed"

Niisiis, pöördume tagasi meie käsu juurde, mille tulemusena teatab konsool, et üks rida on sisestatud:

Ava veebiseminar "MongoDB põhitõed"

Sõna unicorns meeskonnas db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450}) tähistab kollektsiooni. Pange tähele, et me ei kirjeldanud ega loonud kollektsiooni, vaid kirjutasime lihtsalt "ükssarvikud", lisasime ja saime kollektsiooni.

Ja nii me saame hankige kõik meie kollektsioonid:

db.getCollectionNames()

Ja nii edasi. Saab sisestage teine kollektsioon:

Ava veebiseminar "MongoDB põhitõed"

Nüüd küsime täielik kollektsioon (tuletame meelde, et meie puhul sisaldab andmebaas juba teavet kahe samanimelise ükssarviku kohta):

db.unicorns.find()

Pange tähele, et siin on meie JSON (seal on nimi, sugu, kaal, mõni kordumatu objekti identifikaator):

Ava veebiseminar "MongoDB põhitõed"

Nüüd lisame veel paar sama nimega ükssarvikut:

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

Ja vaatame, mis juhtus:

Ava veebiseminar "MongoDB põhitõed"

Nagu näete, on meil täiendavaid välju: kodus и uss, mida Auroral pole.

Lisame veel mõned ükssarvikud:

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

Niisiis, sisestasime JavaScripti abil veel neli objekti:

Ava veebiseminar "MongoDB põhitõed"

Millistes andmebaasides on teie arvates passiandmeid mugavam salvestada: relatsiooniandmebaasid või Mongo?

Vastus on ilmne - Mongas ja ülaltoodud näide näitab seda hästi. Pole saladus, et KLADR on Vene Föderatsioonis valus. Ja Monga sobib aadressidega väga hästi, sest saate kõik massiiviks seada ja elu läheb palju lihtsamaks. Ja see on hea MongoDB kasutajajuhtum.

Lisame veel ükssarvikuid:

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

Ava veebiseminar "MongoDB põhitõed"

Nüüd pöörake tähelepanu dokumentidele. Nagu trumm Hoiame terveid objekte. Samuti on teavet selle kohta, mida ükssarvik armastab, ja kõigil pole seda teavet. Nii et valede sees täielik massiiv.

Muide, tulemuste ilusamaks kuvamiseks võite kutsuda otsingukäsu lõpus oleva meetodi .pretty():

Ava veebiseminar "MongoDB põhitõed"

Kui teil on vaja saada teave viimase vea kohta, kasutage järgmist käsku:

db.getLastError()

Seda saab teha pärast iga sisestamist või konfigureerida Write Concern. Parem on selle kohta lugeda ametlik dokumentatsioon, mis, muide, on Mongas väga informatiivne. Muide, see on saadaval ka Habres hea artikkel sellest.

Liigume edasi keerukamate päringute juurde

Päring täpse välja väärtuse kohta:

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

Sellise soovi kirjutamisel saame konsooli väljundis nimekirja kõigist meessoost ükssarvikutest.

Võite ka teha päring mitmele väljale korraga: soo ja kaalu järgi:

Ava veebiseminar "MongoDB põhitõed"

Eespool pöörake tähelepanu erilisele $gt valija, mis võimaldab aretada kõiki isaseid ükssarvikuid, kes kaaluvad üle 700.

Saate kontrollida kas see valdkond on üldse olemas?:

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

Või nii:

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

Järgmine meeskond toob välja ükssarved, kelle nimed algavad tähtedega A või a:

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

Nüüd kaalume massiivi otsing. Küsimus nr 1: Mida see käsk väljastab:

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

See on õige: kõik, kes armastavad õunu.

Järgmine käsk tagastab ainult need ükssarviku andmed, mis sisaldavad ainult õunad ja arbuusid:

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

Ja veel üks käsk:

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

Meie puhul ei tagasta see midagi, kuna massiivi läbimisel võrreldakse esimest elementi esimesega, teist teisega jne. See tähendab, et massiiv peab ka ühtima positsiooni järgi need väärtused.

Ja see näeb välja selline otsides läbi massiivi operaatori "OR" abil:

Ava veebiseminar "MongoDB põhitõed"

Järgmine näide näitab meile otsige operaatori $all abil. Ja siin on järjestus tähtsusetu:

Ava veebiseminar "MongoDB põhitõed"

Samuti saame otsi massiivi suuruse järgi:

Ava veebiseminar "MongoDB põhitõed"

Aga mis siis, kui tahame leida massiivi, mille suurus on suurem kui üks? Selleks on operaator $kus, millega saab kirjutada keerulisemaid asju:

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

Muide, kui soovite harjutada, seal sa oled fail käskudega.

Kursori funktsioonid

Lähme veidi kõrvale ja ütleme paar sõna Monga omaduste kohta:

  • find() ja muud toimingud ei tagasta andmeid - tagastavad nn kursori;
  • see, et me näeme, et andmeid trükitakse, on tõlgi töö.

Tippimine db.unicorns.find ilma sulgudeta saame käsu:

Ava veebiseminar "MongoDB põhitõed"

Jätkame soovide täitmist

Seal on ka $in operaator:

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

Ava veebiseminar "MongoDB põhitõed"

Räägime nüüd värskendusest. Näiteks muudame Rooooodlesi ükssarviku kaalu:

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

Meie tegevuse tulemusena dokument uuendatakse täielikult, ja sinna jääb ainult üks määratud väli:

Ava veebiseminar "MongoDB põhitõed"

See tähendab, et meie objektile jääb alles kaal 2222 ja loomulikult id.

Saate olukorda parandada kasutades $set:

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

Ava veebiseminar "MongoDB põhitõed"

Samuti on võimalus juurdekasvu väärtused:

Ava veebiseminar "MongoDB põhitõed"

Ja on ka ärritunud - värskendamise ja lisamise kombinatsioon:

Ava veebiseminar "MongoDB põhitõed"

Seda tehakse järgmiselt välja valik:

Ava veebiseminar "MongoDB põhitõed"

Ava veebiseminar "MongoDB põhitõed"

Jääb veel paar sõna selle kohta lisada vahelejätmine и piirama:

Ava veebiseminar "MongoDB põhitõed"

Kolleegid, see on kõik, kui soovite üksikasju teada, vaata kogu videot. Ja ärge unustage jätta oma kommentaare!

Allikas: www.habr.com

Lisa kommentaar