Marafiki, uzinduzi mwingine wa kozi
Mtandao ulifanyika
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:
Sasa hebu tuandike ile ya jadi Salamu, Dunia:
print (βHello world!β)
Baada ya hapo - tuanze mzunguko:
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
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
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:
Kwa hivyo, wacha turudi kwa amri yetu, kama matokeo ambayo koni itaripoti kuwa mstari mmoja umeingizwa:
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:
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):
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:
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:
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});
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()
:
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
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:
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".:
Mfano ufuatao utatuonyesha tafuta kwa kutumia $all operator. Na hapa mlolongo sio muhimu:
Pia tunaweza tafuta kwa ukubwa wa safu:
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,
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:
Tunaendelea kutimiza maombi
Pia kuna $in operator:
db.unicorns.find({weight: {$in: [650, 704]}})
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:
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}})
Pia inawezekana maadili ya ongezeko:
Na pia kuna kukasirisha - mchanganyiko wa sasisho na kuingiza:
Hivi ndivyo inafanywa uteuzi wa shamba:
Inabakia kuongeza maneno machache kuhusu ruka ΠΈ kikomo:
Wenzangu, ni hayo tu, ikiwa unataka kujua maelezo,
Chanzo: mapenzi.com