Zanmi, yon lòt lansman kou
Webinar a te fèt
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:
Koulye a, ann ekri tradisyonèl la Bonjou Mondyal la:
print (“Hello world!”)
Apre sa - ann kòmanse sik la:
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
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
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:
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:
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:
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):
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:
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:
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});
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()
:
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
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:
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:
Egzanp sa a pral montre nou rechèch lè l sèvi avèk $all operatè. Ak isit la sekans lan pa enpòtan:
Nou kapab tou rechèch pa gwosè etalaj:
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,
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:
Nou kontinye ranpli demann yo
Genyen tou operatè $in:
db.unicorns.find({weight: {$in: [650, 704]}})
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:
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}})
Li posib tou ogmante valè:
Epi gen tou fache - konbinezon aktyalizasyon ak insert:
Men ki jan sa fèt seleksyon jaden:
Li rete pou ajoute kèk mo sou sote и limite:
Kòlèg yo, se tout, si ou vle konnen detay yo,
Sous: www.habr.com