Vriende, nog 'n kursus bekendstelling
Die webinar is gehou
MongoDB-kenmerke
MongoDB is 'n oopbron-dokument-georiënteerde DBBS wat nie 'n beskrywing van die tabelskema vereis nie. Dit word geklassifiseer as NoSQL en gebruik BSON (binêre JSON). Skaalbaar uit die boks, geskryf in C++ en ondersteun JavaScript-sintaksis. Daar is geen SQL-ondersteuning nie.
MongoDB het drywers vir baie gewilde programmeertale (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby, ens.). Daar is ook nie-amptelike en gemeenskapsondersteunde drywers vir ander programmeertale.
Wel, kom ons kyk na die basiese opdragte wat nuttig kan wees.
Dus, om MongoDB in Docker te ontplooi, ons skryf:
docker run -it --rm -p 127.0.0.1:27017:27017
--name mongo-exp-project mongo
docker exec -it mongo-exp-project mongo
So gebeur dit kliënt bekendstelling MongoDB:
Kom ons skryf nou die tradisionele een Hello Wêreld:
print (“Hello world!”)
Na dit - kom ons begin die siklus:
Soos jy opgemerk het, voor ons gereelde JS, en MongoDB is 'n volwaardige JavaScript-tolk.
Wanneer om MongoDB te gebruik?
Daar is 'n storie dat die gemiddelde beginner in Silicon Valley die persoon is wat die boek "HTML for Dummies" 'n week gelede oopgemaak het. Watter stapel sal hy kies? Stem saam dat dit vir hom baie gerieflik is as hy om ooglopende redes JavaScript in sy blaaier het, Node.js op die bediener loop en JavaScript ook in die databasis loop. Dit is punt nommer 1.
Tweedens is daar
Derdens wil ek beklemtoon dat MongoDB gekenmerk word deur goeie skaalbaarheid - en dit is een van die sleutelkenmerke van die databasis. As jy nie vooraf weet wat die vrag gaan wees nie, is MongoDB perfek. Daarbenewens ondersteun dit out-of-the-box patrone soos skeuring и replikasie, en dit alles word redelik deursigtig gedoen, dit wil sê, dit is baie gerieflik om te werk.
Met betrekking tot terminologie in MongoDB dan:
- databasisse is databasisse (skemas, versamelings van tabelle);
- in MongoDB is daar so iets soos die versameling - dit is 'n analoog van 'n tabel en 'n stel dokumente wat logies gekoppel moet word;
- dokumente is analoog aan 'n string.
Databasisskepping en eenvoudige navrae
Om 'n databasis te skep, hoef u dit net te begin gebruik:
use learn
Kom ons maak nou 'n klein insetsel van die dokument. Laat dit byvoorbeeld 'n eenhoorn met die naam Aurora wees:
db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
db - 'n globale voorwerp vir toegang tot die databasis, dit is in werklikheid die "monga" self. Word gebruik vir skeuring sh, vir replikasie - rs.
Watter opdragte het die voorwerp? db:
Dus, kom ons keer terug na ons opdrag, as gevolg waarvan die konsole sal rapporteer dat een reël ingevoeg is:
Woord unicorns
in 'n span db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
dui 'n versameling aan. Neem asseblief hier kennis dat ons nie die versameling beskryf of geskep het nie, maar bloot 'eenhorings' geskryf het, 'n insetsel gedoen het, en ons het 'n versameling gehad.
En dit is hoe ons kan kry al ons versamelings:
db.getCollectionNames()
En so aan. Kan voeg nog een in versameling:
Nou kom ons vra volledige versameling (ons herinner u daaraan dat die databasis in ons geval reeds inligting bevat oor twee eenhorings met dieselfde naam):
db.unicorns.find()
Neem asseblief kennis, hier is ons JSON (daar is 'n naam, geslag, gewig, een of ander unieke voorwerp identifiseerder):
Kom ons voeg nou nog 'n paar eenhorings met dieselfde name in:
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
En kom ons kyk wat gebeur het:
Soos u kan sien, het ons bykomende velde: huis и wurm, wat Aurora nie het nie.
Kom ons voeg nog 'n paar eenhorings by:
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}])
Dus, ons het nog vier voorwerpe ingevoeg met JavaScript:
Na jou mening, in watter databasisse is dit geriefliker om paspoortdata te stoor: relasionele databasisse of Mongo?
Die antwoord is voor die hand liggend - in Monga, en die voorbeeld hierbo wys dit goed. Dit is geen geheim dat KLADR 'n pyn in die Russiese Federasie is nie. En Monga pas baie goed by adresse, want jy kan alles as 'n skikking stel, en die lewe sal baie makliker wees. En dit is 'n goeie een Gebruikersgeval vir MongoDB.
Kom ons voeg meer eenhorings by:
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});
Gee nou aandag aan die dokumente. Soos drom Ons stoor hele voorwerpe. Daar is ook inligting oor wat 'n eenhoorn liefhet, en nie almal het hierdie inligting nie. So binne lê volle reeks.
Terloops, om die resultate mooier te vertoon, kan u die metode aan die einde van die soekopdrag noem .pretty()
:
As jy nodig het om te kry inligting oor die jongste fout, gebruik die volgende opdrag:
db.getLastError()
Dit kan na elke invoeging gedoen word, of jy kan Write Concern konfigureer. Dit is beter om daaroor te lees in
Kom ons gaan aan na meer komplekse navrae
Navraag vir presiese veldwaarde:
db.unicorns.find({gender: 'm'})
Deur so 'n versoek te skryf, sal ons 'n lys van alle manlike eenhorings in die konsole-uitvoer ontvang.
Jy kan ook doen navraag op verskeie velde gelyktydig: volgens geslag en volgens gewig:
Bo, let op die spesiale $gt-kieser, wat jou toelaat om alle manlike eenhorings te teel wat meer as 700 weeg.
Jy kan kyk bestaan die veld enigsins?:
db.unicorns.find({vampires: {$exists: false}})
Of so:
db.unicorns.find({'parents.father': {$exists: true}})
Die volgende span sal die eenhorings uitbring, wie se name met die letters A of a begin:
db.unicorns.find({name: {$regex: "^[Aa]"}})
Kom ons kyk nou na skikking soek. Vraag #1: Wat sal hierdie opdrag uitvoer:
db.unicorns.find({loves:'apple'})
Dis reg: almal wat lief is vir appels.
Die volgende opdrag sal slegs daardie eenhoorndata terugstuur wat bevat slegs appels en waatlemoene:
db.unicorns.find({loves:[ "apple", "watermelon" ]})
En nog 'n opdrag:
db.unicorns.find({loves:[ "watermelon", "apple" ]})
In ons geval sal dit niks teruggee nie, aangesien wanneer ons 'n skikking verbysteek, die eerste element met die eerste vergelyk word, die tweede met die tweede, ens. Dit wil sê, die skikking moet ook ooreenstem volgens posisie hierdie waardes.
En dit is hoe dit lyk soek deur 'n skikking deur die "OR" operateur te gebruik:
Die volgende voorbeeld sal ons wys soek met $all-operateur. En hier is die volgorde onbelangrik:
Ons kan ook soek volgens skikking grootte:
Maar wat as ons 'n skikking wil vind waarvan die grootte groter as een is? Daar is 'n operateur hiervoor $waar, waarmee jy meer komplekse dinge kan skryf:
db.unicorns.find({$where: function() { return this.loves && (this.loves.length > 1) } })
Terloops, as jy wil oefen,
Wyser kenmerke
Kom ons dwaal 'n bietjie af en sê 'n paar woorde oor die kenmerke van Monga:
- find() en ander bewerkings gee nie data terug nie - hulle gee 'n sogenaamde "wyser" terug;
- die feit dat ons sien dat die data gedruk word, is die werk van die tolk.
Tik db.eenhorings.vind sonder hakies kry ons die prompt:
Ons gaan voort om aan versoeke te voldoen
Daar is ook die $in operateur:
db.unicorns.find({weight: {$in: [650, 704]}})
Kom ons praat nou oor opdatering. Kom ons verander byvoorbeeld die gewig van die Rooooodles-eenhoorn:
db.unicorns.update({name: "Roooooodles"}, {weight: 2222})
As gevolg van ons optrede, die dokument sal heeltemal opgedateer word, en slegs een gespesifiseerde veld sal daarin bly:
Dit wil sê, die enigste ding wat vir ons voorwerp sal oorbly, is die gewig 2222 en, natuurlik, id.
U kan die situasie regstel deur $stel:
db.unicorns.update({_id: ObjectId("5da6ea4d9703b8be0089e6db")}, {$set: { "name" : "Roooooodles", "dob" : ISODate("1979-08-18T18:44:00Z"), "loves" : [ "apple" ], "gender" : "m", "vampires" : 99}})
Dit is ook moontlik waardes verhoog:
En daar is ook opstoot - kombinasie van opdatering en voeg in:
Hier is hoe dit gedoen word veldkeuse:
Dit bly om 'n paar woorde oor by te voeg slaan и beperk:
Kollegas, dit is al, as jy die besonderhede wil weet,
Bron: will.com