Fungua wavuti "Misingi ya MongoDB"

Marafiki, uzinduzi mwingine wa kozi "database" itafanyika kesho, kwa hivyo tulifanya somo la jadi la wazi, rekodi ambayo unaweza kutazama hapa. Wakati huu tulizungumza juu ya hifadhidata maarufu ya MongoDB: tulisoma baadhi ya hila, tukaangalia misingi ya uendeshaji, uwezo na usanifu. Pia tuligusia baadhi ya Kesi za Watumiaji.

Fungua wavuti "Misingi ya MongoDB"

Mtandao ulifanyika Ukanda wa Ivan, mkuu wa maendeleo ya seva katika Citymobil.

Vipengele vya MongoDB

MongoDB ni chanzo huria cha DBMS kinachoelekeza hati ambacho hakihitaji maelezo ya taratibu za jedwali. Imeainishwa kama NoSQL na hutumia BSON (binary JSON). Inaweza kupunguzwa nje ya kisanduku, iliyoandikwa kwa C++ na inaauni syntax ya JavaScript. Hakuna usaidizi wa SQL.

MongoDB ina viendeshaji kwa lugha nyingi maarufu za programu (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby, nk). Pia kuna viendeshaji visivyo rasmi na vinavyoungwa mkono na jumuiya kwa lugha nyingine za programu.

Naam, hebu tuangalie amri za msingi ambazo zinaweza kuwa na manufaa.

Kwa hivyo, kupeleka MongoDB kwenye Docker, Tunaandika:

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

Hivyo hutokea uzinduzi wa mteja MongoDB:

Fungua wavuti "Misingi ya MongoDB"

Sasa hebu tuandike ile ya jadi Salamu, Dunia:

print (β€œHello world!”)

Fungua wavuti "Misingi ya MongoDB"

Baada ya hapo - tuanze mzunguko:

Fungua wavuti "Misingi ya MongoDB"

Kama ulivyoona, mbele yetu kawaida JS, na MongoDB ni mkalimani kamili wa JavaScript.

Wakati wa kutumia MongoDB?

Kuna hadithi kwamba mwanzilishi wa wastani katika Silicon Valley ni mtu aliyefungua kitabu cha "HTML for Dummies" wiki moja iliyopita. Atachagua stakabadhi gani? Kukubaliana kuwa ni rahisi sana kwake wakati, kwa sababu za wazi, ana JavaScript kwenye kivinjari chake, Node.js inaendesha kwenye seva, na JavaScript pia inaendesha kwenye hifadhidata. Hii ni pointi namba 1.

Pili, kuna utendaji mzuri Peter Zaitsev, mmoja wa wataalam bora wa hifadhidata nchini Urusi. Ndani yake, Peter anazungumza juu ya MySQL na MongoDB, akilipa kipaumbele maalum wakati na nini ni bora kutumia.

Tatu, ningependa kusisitiza kwamba MongoDB ina sifa nzuri scalability - na hii ni moja ya vipengele muhimu vya hifadhidata. Ikiwa haujui mapema mzigo utakuwa nini, MongoDB ni kamili. Kwa kuongeza, inasaidia mifumo ya nje ya sanduku kama vile kugawanyika ΠΈ urudufishaji, na yote haya yanafanywa kwa uwazi kabisa, yaani, ni rahisi sana kufanya kazi.

Kwa upande wa istilahi katika MongoDB basi:

  • hifadhidata ni hifadhidata (mipango, makusanyo ya jedwali);
  • katika MongoDB kuna kitu kama mkusanyiko - hii ni analog ya meza na seti ya nyaraka ambazo, kimantiki, zinapaswa kuunganishwa;
  • hati ni sawa na mfuatano.

Uundaji wa hifadhidata na maswali rahisi

Ili kuunda hifadhidata, unahitaji tu kuanza kuitumia:

use learn

Fungua wavuti "Misingi ya MongoDB"

Sasa hebu tufanye kuingiza ndogo ya hati. Wacha iwe, kwa mfano, nyati anayeitwa Aurora:

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

db - kitu cha kimataifa cha kupata hifadhidata, ambayo ni, kwa kweli, "monga" yenyewe. Inatumika kwa kugawa sh, kwa marudio - rs.

Je, kitu hicho kina amri gani? db:

Fungua wavuti "Misingi ya MongoDB"

Kwa hivyo, wacha turudi kwa amri yetu, kama matokeo ambayo koni itaripoti kuwa mstari mmoja umeingizwa:

Fungua wavuti "Misingi ya MongoDB"

Neno unicorns katika timu db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450}) inaashiria mkusanyiko. Tafadhali kumbuka hapa kwamba hatukuelezea au kuunda mkusanyiko, lakini tuliandika tu 'nyati', tukaingiza, na tulikuwa na mkusanyiko.

Na hivi ndivyo tunavyoweza pata mikusanyiko yetu yote:

db.getCollectionNames()

Nakadhalika. Unaweza ingiza nyingine mkusanyiko:

Fungua wavuti "Misingi ya MongoDB"

Sasa hebu tuulize mkusanyiko kamili (tunakukumbusha kwamba kwa upande wetu hifadhidata tayari ina habari kuhusu nyati mbili zilizo na jina moja):

db.unicorns.find()

Tafadhali kumbuka, hapa kuna JSON yetu (kuna jina, jinsia, uzito, kitambulisho cha kipekee cha kitu):

Fungua wavuti "Misingi ya MongoDB"

Sasa wacha tuingize nyati kadhaa zilizo na majina sawa:

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

Na tuone kilichotokea:

Fungua wavuti "Misingi ya MongoDB"

Kama unaweza kuona, tunayo sehemu za ziada: nyumbani ΠΈ minyoo, ambayo Aurora haina.

Wacha tuongeze nyati chache zaidi:

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

Kwa hivyo, tuliingiza vitu vinne zaidi kwa kutumia JavaScript:

Fungua wavuti "Misingi ya MongoDB"

Kwa maoni yako, katika hifadhidata gani ni rahisi zaidi kuhifadhi data ya pasipoti: hifadhidata za uhusiano au Mongo?

Jibu ni dhahiri - kwa Monga, na mfano hapo juu unaonyesha hii vizuri. Sio siri kwamba KLADR ni maumivu katika Shirikisho la Urusi. Na Monga inafaa sana na anwani, kwa sababu unaweza kuweka kila kitu kama safu, na maisha yatakuwa rahisi zaidi. Na ni nzuri Kesi ya Mtumiaji ya MongoDB.

Wacha tuongeze nyati zaidi:

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

Fungua wavuti "Misingi ya MongoDB"

Sasa makini na nyaraka. Kama jambazi Tunahifadhi vitu vyote. Pia kuna habari kuhusu kile nyati anapenda, na sio kila mtu ana habari hii. Kwa hivyo ndani kuna uwongo safu kamili.

Kwa njia, ili kuonyesha matokeo kwa uzuri zaidi, unaweza kupiga njia mwishoni mwa amri ya utafutaji .pretty():

Fungua wavuti "Misingi ya MongoDB"

Ikiwa unahitaji kupata habari kuhusu hitilafu ya hivi karibuni, tumia amri ifuatayo:

db.getLastError()

Hili linaweza kufanywa baada ya kila uwekaji, au unaweza kusanidi Kuandika Wasiwasi. Ni bora kusoma juu yake ndani nyaraka rasmi, ambayo, kwa njia, ni taarifa sana katika Monga. Kwa njia, inapatikana pia kwenye Habre makala nzuri kwenye hafla hii.

Wacha tuendelee kwenye maswali magumu zaidi

Swali la thamani halisi ya uga:

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

Kwa kuandika ombi kama hilo, tutapokea orodha ya nyati zote za kiume kwenye pato la kiweko.

Unaweza pia kufanya uliza kwenye nyanja kadhaa mara moja: kwa jinsia na kwa uzito:

Fungua wavuti "Misingi ya MongoDB"

Hapo juu, makini na maalum $gt kichaguzi, ambayo hukuruhusu kuzaliana nyati zote za kiume zenye uzito zaidi ya 700.

Unaweza kuangalia uwanja upo kabisa?:

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

Au hivyo:

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

Timu inayofuata italeta nyati, ambao majina yao yanaanza na herufi A au a:

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

Sasa hebu tufikirie utafutaji wa safu. Swali # 1: Je! amri hii itatoa matokeo gani:

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

Hiyo ni kweli: kila mtu anayependa maapulo.

Amri ifuatayo itarudisha data ya nyati iliyo na pekee tu apples na watermelons:

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

Na amri moja zaidi:

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

Kwa upande wetu, haitarudi chochote, kwani tunapopita safu, kipengele cha kwanza kinalinganishwa na cha kwanza, cha pili na cha pili, nk. Hiyo ni, safu lazima pia ifanane. kwa nafasi maadili haya.

Na hii ndivyo inavyoonekana kutafuta kupitia safu kwa kutumia opereta "OR".:

Fungua wavuti "Misingi ya MongoDB"

Mfano ufuatao utatuonyesha tafuta kwa kutumia $all operator. Na hapa mlolongo sio muhimu:

Fungua wavuti "Misingi ya MongoDB"

Pia tunaweza tafuta kwa ukubwa wa safu:

Fungua wavuti "Misingi ya MongoDB"

Lakini vipi ikiwa tunataka kupata safu ambayo saizi yake ni kubwa kuliko moja? Kuna operator kwa hili $ wapi, ambayo unaweza kuandika vitu ngumu zaidi:

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

Kwa njia, ikiwa unataka kufanya mazoezi, hapo ulipo faili na amri.

Vipengele vya Mshale

Wacha tuzungumze kidogo na tuseme maneno machache juu ya sifa za Monga:

  • find() na shughuli zingine hazirudishi data - zinarudisha kinachojulikana kama "mshale";
  • ukweli kwamba tunaona data ikichapishwa ni kazi ya mkalimani.

Kuandika db.nyati.pata bila mabano, tunapata haraka:

Fungua wavuti "Misingi ya MongoDB"

Tunaendelea kutimiza maombi

Pia kuna $in operator:

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

Fungua wavuti "Misingi ya MongoDB"

Sasa hebu tuzungumze kuhusu sasisho. Kwa mfano, wacha tubadilishe uzito wa nyati wa Rooooodles:

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

Kama matokeo ya matendo yetu, hati itasasishwa kabisa, na sehemu moja tu iliyoainishwa itabaki ndani yake:

Fungua wavuti "Misingi ya MongoDB"

Hiyo ni, kitu pekee kitakachobaki kwa kitu chetu ni uzito 2222 na, bila shaka, id.

Unaweza kurekebisha hali hiyo kwa kutumia $ seti:

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

Fungua wavuti "Misingi ya MongoDB"

Pia inawezekana maadili ya ongezeko:

Fungua wavuti "Misingi ya MongoDB"

Na pia kuna kukasirisha - mchanganyiko wa sasisho na kuingiza:

Fungua wavuti "Misingi ya MongoDB"

Hivi ndivyo inafanywa uteuzi wa shamba:

Fungua wavuti "Misingi ya MongoDB"

Fungua wavuti "Misingi ya MongoDB"

Inabakia kuongeza maneno machache kuhusu ruka ΠΈ kikomo:

Fungua wavuti "Misingi ya MongoDB"

Wenzangu, ni hayo tu, ikiwa unataka kujua maelezo, tazama video nzima. Na usisahau kuacha maoni yako!

Chanzo: mapenzi.com

Kuongeza maoni