Sõbrad, järjekordne kursuse algus
Veebiseminar peeti
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:
Nüüd kirjutame traditsioonilise Tere maailm:
print (“Hello world!”)
Pärast seda - alustame tsüklit:
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
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
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:
Niisiis, pöördume tagasi meie käsu juurde, mille tulemusena teatab konsool, et üks rida on sisestatud:
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:
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):
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:
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:
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});
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()
:
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
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:
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:
Järgmine näide näitab meile otsige operaatori $all abil. Ja siin on järjestus tähtsusetu:
Samuti saame otsi massiivi suuruse järgi:
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,
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:
Jätkame soovide täitmist
Seal on ka $in operaator:
db.unicorns.find({weight: {$in: [650, 704]}})
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:
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}})
Samuti on võimalus juurdekasvu väärtused:
Ja on ka ärritunud - värskendamise ja lisamise kombinatsioon:
Seda tehakse järgmiselt välja valik:
Jääb veel paar sõna selle kohta lisada vahelejätmine и piirama:
Kolleegid, see on kõik, kui soovite üksikasju teada,
Allikas: www.habr.com