Louvri webinar "MongoDB Basics"

Zanmi, yon lòt lansman kou "Baz done" pral pran plas demen, se konsa nou te fè yon leson tradisyonèl ouvè, anrejistreman an nan ki ou ka gade isit la. Fwa sa a, nou te pale sou baz done popilè MongoDB: nou etidye kèk nan sibtilite yo, gade debaz yo nan operasyon, kapasite ak achitekti. Nou tou manyen kèk ka itilizatè.

Louvri webinar "MongoDB Basics"

Webinar a te fèt Ivan Belt, tèt devlopman sèvè nan Citymobil.

Karakteristik MongoDB

MongoDB se yon DBMS sous ouvè ki oryante sou dokiman ki pa mande pou yon deskripsyon chema tab la. Li klase kòm NoSQL epi li sèvi ak BSON (binè JSON). Évolutive soti nan bwat la, ekri nan C++ ak sipòte sentaks JavaScript. Pa gen okenn sipò SQL.

MongoDB gen chofè pou anpil lang pwogramasyon popilè (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby, elatriye). Genyen tou chofè ki pa ofisyèl epi ki sipòte kominote a pou lòt lang pwogramasyon.

Oke, an n gade nan kòmandman debaz yo ki ka itil.

Se konsa, deplwaye MongoDB nan Docker, nou ekri:

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

Se konsa li rive lansman kliyan MongoDB:

Louvri webinar "MongoDB Basics"

Koulye a, ann ekri tradisyonèl la Bonjou Mondyal la:

print (“Hello world!”)

Louvri webinar "MongoDB Basics"

Apre sa - ann kòmanse sik la:

Louvri webinar "MongoDB Basics"

Kòm ou remake, anvan nou regilye JS, ak MongoDB se yon entèprèt JavaScript konplè.

Ki lè pou itilize MongoDB?

Gen yon istwa ki demaraj mwayèn nan Silisyòm Valley se moun ki te louvri liv "HTML for Dummies" yon semèn de sa. Ki pil li pral chwazi? Dakò ke li trè pratik pou li lè, pou rezon evidan, li gen JavaScript nan navigatè li a, Node.js ap kouri sou sèvè a, ak JavaScript ap kouri tou nan baz done a. Sa a se pwen nimewo 1.

Dezyèmman, gen gwo pèfòmans Peter Zaitsev, youn nan pi bon espesyalis baz done nan Larisi. Nan li, Pyè pale sou MySQL ak MongoDB, peye atansyon espesyal sou ki lè ak sa ki pi bon yo sèvi ak.

Twazyèmman, mwen ta renmen mete aksan sou ke MongoDB karakterize pa bon évolutivité - ak sa a se youn nan karakteristik kle yo nan baz done a. Si ou pa konnen davans ki chaj la pral ye, MongoDB pafè. Anplis de sa, li sipòte modèl ki soti nan bwat tankou sharding и replikasyon, ak tout sa a se fè byen transparan, se sa ki, li trè pratik nan travay.

Kòm concerne tèminoloji nan MongoDB lè sa a:

  • baz done yo se baz done (skem, koleksyon tab);
  • nan MongoDB gen yon bagay tankou koleksyon an - sa a se yon analogue nan yon tablo ak yon seri dokiman ki, lojikman, yo ta dwe konekte;
  • dokiman yo analogue ak yon fisèl.

Kreyasyon baz done ak demann senp

Pou kreye yon baz done, ou jis bezwen kòmanse sèvi ak li:

use learn

Louvri webinar "MongoDB Basics"

Koulye a, an n fè yon ti insert nan dokiman an. Se pou li, pou egzanp, yon likorn yo te rele Aurora:

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

db - yon objè mondyal pou jwenn aksè nan baz done a, se sa ki, an reyalite, "monga" tèt li. Itilize pou sharding sh, pou replikasyon - rs.

Ki kòmandman objè a genyen? db:

Louvri webinar "MongoDB Basics"

Se konsa, ann retounen nan lòd nou an, kòm yon konsekans ki konsole a pral rapòte ke yo te mete yon liy:

Louvri webinar "MongoDB Basics"

Pawòl unicorns nan yon ekip db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450}) vle di yon koleksyon. Tanpri sonje isit la ke nou pa t 'dekri oswa kreye koleksyon an, men tou senpleman te ekri 'likorn', te fè yon insert, epi nou te gen yon koleksyon.

E se konsa nou kapab jwenn tout koleksyon nou yo:

db.getCollectionNames()

Ak sou sa. Kapab mete yon lòt koleksyon:

Louvri webinar "MongoDB Basics"

Koulye a, ann mande koleksyon konplè (nou raple w ke nan ka nou an baz done a deja gen enfòmasyon sou de likorn ki gen menm non):

db.unicorns.find()

Tanpri sonje, isit la se JSON nou an (gen yon non, sèks, pwa, kèk idantifyan objè inik):

Louvri webinar "MongoDB Basics"

Koulye a, ann mete yon koup plis likorn ak menm non yo:

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

Epi ann wè sa ki te pase:

Louvri webinar "MongoDB Basics"

Kòm ou ka wè, nou gen lòt jaden: lakay и vè k'ap manje kadav, ki Aurora pa genyen.

Ann ajoute kèk plis likorn:

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

Se konsa, nou mete kat plis objè lè l sèvi avèk JavaScript:

Louvri webinar "MongoDB Basics"

Dapre ou, nan ki baz done li pi bon pou konsève done paspò: baz done relasyon oswa Mongo?

Repons lan se evidan - nan Monga, ak egzanp ki anwo a montre sa a byen. Li pa sekrè ke KLADR se yon doulè nan Federasyon Larisi la. Ak Monga adapte trè byen ak adrès, paske ou ka mete tout bagay kòm yon etalaj, ak lavi yo pral pi fasil. Epi li se yon bon Ka itilizatè pou MongoDB.

Ann ajoute plis likorn:

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

Louvri webinar "MongoDB Basics"

Koulye a, peye atansyon sou dokiman yo. Kòm tanbou Nou estoke tout objè yo. Genyen tou enfòmasyon sou sa yon likorn renmen, epi se pa tout moun ki gen enfòmasyon sa a. Se konsa, anndan manti etalaj konplè.

By wout la, yo montre rezilta yo pi bèl, ou ka rele metòd la nan fen lòd rechèch la .pretty():

Louvri webinar "MongoDB Basics"

Si ou bezwen jwenn enfòmasyon sou dènye erè a, sèvi ak lòd sa a:

db.getLastError()

Sa a ka fè apre chak ensèsyon, oswa ou ka configured Write Concern. Li pi bon pou li sou li nan dokiman ofisyèl yo, ki, nan chemen an, trè enfòmatif nan Monga. By wout la, li disponib tou sou Habré bon atik nan okazyon sa a.

Ann ale nan demann ki pi konplèks

Rechèch pou valè jaden egzak:

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

Lè w ekri yon demann konsa, nou pral resevwa yon lis tout likorn gason nan pwodiksyon konsole a.

Ou ka fè tou demann sou plizyè jaden an menm tan: pa sèks ak pwa:

Louvri webinar "MongoDB Basics"

Pi wo a, peye atansyon sou espesyal la $gt seleksyon, ki pèmèt ou kwaze tout likorn gason ki peze plis pase 700.

Ou ka tcheke èske jaden an egziste ditou?:

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

Oswa konsa:

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

Pwochen ekip la pral pote likorn yo soti, ki gen non kòmanse ak lèt ​​A oswa yon:

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

Koulye a, an n konsidere rechèch etalaj. Kesyon #1: Ki sa ki pral bay lòd sa a:

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

Se vre: tout moun ki renmen pòm.

Kòmandman sa a pral retounen sèlman done likorn sa yo ki genyen sèlman pòm ak melon:

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

Ak yon lòt kòmandman:

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

Nan ka nou an, li pa pral retounen anyen, depi lè nou pase yon etalaj, premye eleman an konpare ak premye a, dezyèm lan ak dezyèm lan, elatriye. Sa vle di, etalaj la dwe matche tou. pa pozisyon valè sa yo.

Ak sa a se sa li sanble chèche nan yon etalaj lè l sèvi avèk "OR" operatè a:

Louvri webinar "MongoDB Basics"

Egzanp sa a pral montre nou rechèch lè l sèvi avèk $all operatè. Ak isit la sekans lan pa enpòtan:

Louvri webinar "MongoDB Basics"

Nou kapab tou rechèch pa gwosè etalaj:

Louvri webinar "MongoDB Basics"

Men, e si nou vle jwenn yon etalaj ki gen gwosè ki pi gran pase yon sèl? Gen yon operatè pou sa $kote, ak ki ou ka ekri bagay ki pi konplèks:

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

By wout la, si ou vle pratike, la ou ye dosye ak kòmandman.

Karakteristik kurseur

Ann digress yon ti kras epi di kèk mo sou karakteristik sa yo nan Monga:

  • find() ak lòt operasyon yo pa retounen done - yo retounen yon sa yo rele "kurseur";
  • lefèt ke nou wè done yo ap enprime se travay entèprèt la.

Tape db.unicorns.find san parantèz, nou jwenn èd memwa a:

Louvri webinar "MongoDB Basics"

Nou kontinye ranpli demann yo

Genyen tou operatè $in:

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

Louvri webinar "MongoDB Basics"

Koulye a, ann pale sou aktyalizasyon. Pou egzanp, ann chanje pwa likorn Rooooodles la:

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

Kòm yon rezilta nan aksyon nou yo, dokiman an pral konplètman mete ajou, epi sèlman yon sèl jaden espesifye ap rete ladan l:

Louvri webinar "MongoDB Basics"

Sa vle di, sèl bagay ki pral rete pou objè nou an se pwa 2222 ak, nan kou, id.

Ou ka korije sitiyasyon an lè l sèvi avèk $ansanm:

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

Louvri webinar "MongoDB Basics"

Li posib tou ogmante valè:

Louvri webinar "MongoDB Basics"

Epi gen tou fache - konbinezon aktyalizasyon ak insert:

Louvri webinar "MongoDB Basics"

Men ki jan sa fèt seleksyon jaden:

Louvri webinar "MongoDB Basics"

Louvri webinar "MongoDB Basics"

Li rete pou ajoute kèk mo sou sote и limite:

Louvri webinar "MongoDB Basics"

Kòlèg yo, se tout, si ou vle konnen detay yo, gade tout videyo a. Epi pa bliye kite kòmantè ou yo!

Sous: www.habr.com

Add nouvo kòmantè