Do'stlar, yana bir kurs boshlandi
Vebinar bo'lib o'tdi
MongoDB xususiyatlari
MongoDB jadval sxemasining tavsifini talab qilmaydigan ochiq kodli hujjatga yo'naltirilgan DBMS. U NoSQL sifatida tasniflanadi va BSON (ikkilik JSON) dan foydalanadi. C++ da yozilgan va JavaScript sintaksisini qo'llab-quvvatlaydigan qutidan tashqarida kengaytirilishi mumkin. SQL-ni qo'llab-quvvatlash yo'q.
MongoDB ko'plab mashhur dasturlash tillari uchun drayverlarga ega (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby va boshqalar). Boshqa dasturlash tillari uchun norasmiy va hamjamiyat tomonidan qo'llab-quvvatlanadigan drayverlar ham mavjud.
Keling, foydali bo'lishi mumkin bo'lgan asosiy buyruqlarni ko'rib chiqaylik.
Shunday qilib, MongoDB-ni Docker-da joylashtirish uchun, biz yozamiz:
docker run -it --rm -p 127.0.0.1:27017:27017
--name mongo-exp-project mongo
docker exec -it mongo-exp-project mongo
Shunday bo'ladi mijozni ishga tushirish MongoDB:
Endi an'anaviyni yozamiz Salom Dunyo:
print (“Hello world!”)
Bundan keyin - siklni boshlaylik:
Siz sezganingizdek, bizdan oldin oddiy JS, va MongoDB to'liq huquqli JavaScript tarjimonidir.
MongoDB dan qachon foydalanish kerak?
Silikon vodiysidagi o'rtacha startap bir hafta oldin "HTML for Dummies" kitobini ochgan odam ekanligi haqida hikoya bor. U qaysi to'plamni tanlaydi? Ma'lum sabablarga ko'ra uning brauzerida JavaScript bo'lsa, serverda Node.js va ma'lumotlar bazasida JavaScript ham ishlayotgan bo'lsa, bu unga juda qulay ekanligiga rozi bo'ling. Bu 1-sonli nuqta.
Ikkinchidan, bor
Uchinchidan, MongoDB yaxshilik bilan ajralib turishini ta'kidlamoqchiman masshtablilik - va bu ma'lumotlar bazasining asosiy xususiyatlaridan biridir. Agar siz yuk nima bo'lishini oldindan bilmasangiz, MongoDB mukammaldir. Bunga qo'shimcha ravishda, u kabi qutidan tashqari naqshlarni qo'llab-quvvatlaydi parchalanish и replikatsiya, va bularning barchasi juda shaffof tarzda amalga oshiriladi, ya'ni ishlash uchun juda qulay.
Bilan bog'liq terminologiya keyin MongoDB da:
- ma'lumotlar bazalari ma'lumotlar bazalari (sxemalar, jadvallar to'plami);
- MongoDB da shunday narsa bor To'plam - bu jadvalning analogi va mantiqiy ravishda ulanishi kerak bo'lgan hujjatlar to'plami;
- hujjatlar qatorga o'xshash.
Ma'lumotlar bazasini yaratish va oddiy so'rovlar
Ma'lumotlar bazasini yaratish uchun undan foydalanishni boshlash kifoya:
use learn
Endi hujjatning kichik qo'shimchasini qilaylik. Bu, masalan, Aurora ismli yagona shoxli bo'lsin:
db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
db - ma'lumotlar bazasiga kirish uchun global ob'ekt, ya'ni "monga" ning o'zi. Sharding uchun ishlatiladi sh, replikatsiya uchun - rs.
Ob'ekt qanday buyruqlarga ega? db:
Shunday qilib, keling, bizning buyruqimizga qaytaylik, natijada konsol bitta qator kiritilganligi haqida xabar beradi:
So'z unicorns
jamoada db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
to'plamni bildiradi. E'tibor bering, biz to'plamni ta'riflamadik yoki yaratmadik, shunchaki "yakka shoxlar" yozdik, qo'shimcha qildik va bizda to'plam bor edi.
Va biz shunday qila olamiz barcha kollektsiyalarimizni oling:
db.getCollectionNames()
Va hokazo. mumkin boshqasini kiriting yig'ish:
Endi so'raylik to'liq to'plam (bizning holatimizda ma'lumotlar bazasida bir xil nomdagi ikkita unicorn haqida ma'lumot mavjudligini eslatib o'tamiz):
db.unicorns.find()
Iltimos, diqqat qiling, bu bizning JSON (ism, jins, vazn, noyob ob'ekt identifikatori mavjud):
Keling, bir xil nomli yana bir nechta yagona shoxlarni qo'shamiz:
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
Va nima bo'lganini ko'rib chiqaylik:
Ko'rib turganingizdek, bizda qo'shimcha maydonlar mavjud: uy и chuvalchang, bu Aurorada yo'q.
Keling, yana bir nechta yagona shoxlarni qo'shamiz:
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}])
Shunday qilib, biz JavaScript yordamida yana to'rtta ob'ektni joylashtirdik:
Sizningcha, qaysi ma'lumotlar bazalarida pasport ma'lumotlarini saqlash qulayroq: relyatsion ma'lumotlar bazalari yoki Mongo?
Javob aniq - Mongada va yuqoridagi misol buni yaxshi ko'rsatadi. Hech kimga sir emaski, KLADR Rossiya Federatsiyasida og'riqdir. Va Monga manzillar bilan juda mos keladi, chunki siz hamma narsani massiv sifatida o'rnatishingiz mumkin va hayot ancha osonlashadi. Va bu yaxshi MongoDB uchun foydalanuvchi ishi.
Keling, yana bitta shoxlarni qo'shamiz:
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});
Endi hujjatlarga e'tibor bering. Sifatda baraban Biz butun ob'ektlarni saqlaymiz. Unicorn nimani yaxshi ko'rishi haqida ham ma'lumot mavjud va hamma ham bu ma'lumotga ega emas. Shunday qilib, ichkarida yolg'on bor to'liq massiv.
Aytgancha, natijalarni yanada chiroyli ko'rsatish uchun siz qidiruv buyrug'ining oxiridagi usulni chaqirishingiz mumkin .pretty()
:
Agar olishingiz kerak bo'lsa oxirgi xato haqida ma'lumot, quyidagi buyruqdan foydalaning:
db.getLastError()
Buni har bir kiritishdan keyin qilish mumkin yoki siz Xavotir yozishni sozlashingiz mumkin. Bu haqda o'qish yaxshidir
Keling, murakkabroq so'rovlarga o'tamiz
Aniq maydon qiymati uchun so'rov:
db.unicorns.find({gender: 'm'})
Bunday so'rovni yozish orqali biz konsol chiqishidagi barcha erkak yagona shoxlar ro'yxatini olamiz.
Siz ham qila olasiz bir vaqtning o'zida bir nechta maydonlar bo'yicha so'rov: jinsi va vazni bo'yicha:
Yuqorida, alohida e'tibor bering $gt selektori, bu sizga 700 dan ortiq og'irlikdagi barcha erkak yagona shoxlarni ko'paytirishga imkon beradi.
Tekshirishingiz mumkin maydon umuman mavjudmi?:
db.unicorns.find({vampires: {$exists: false}})
Yoki shunday:
db.unicorns.find({'parents.father': {$exists: true}})
Keyingi jamoa yagona shoxlarni olib chiqadi, ismlari A yoki a harflari bilan boshlanadigan:
db.unicorns.find({name: {$regex: "^[Aa]"}})
Endi ko'rib chiqaylik massiv qidiruvi. Savol №1: Bu buyruq nima beradi:
db.unicorns.find({loves:'apple'})
To'g'ri: olma sevadigan har bir kishi.
Quyidagi buyruq faqat o'z ichiga olgan yagona shoxli ma'lumotlarni qaytaradi faqat olma va tarvuzlar:
db.unicorns.find({loves:[ "apple", "watermelon" ]})
Va yana bir buyruq:
db.unicorns.find({loves:[ "watermelon", "apple" ]})
Bizning holatda, u hech narsani qaytarmaydi, chunki biz massivni o'tkazganimizda, birinchi element birinchisi bilan, ikkinchisi ikkinchisi bilan va hokazo solishtiriladi. Ya'ni massiv ham mos kelishi kerak. pozitsiyasi bo'yicha bu qadriyatlar.
Va bu shunday ko'rinadi "OR" operatori yordamida massiv orqali qidirish:
Quyidagi misol bizga ko'rsatadi $all operatori yordamida qidiruv. Va bu erda ketma-ketlik muhim emas:
Biz ham qila olamiz massiv hajmi bo'yicha qidirish:
Ammo hajmi birdan katta bo'lgan massivni topmoqchi bo'lsak-chi? Buning uchun operator mavjud $ qayerda, uning yordamida siz murakkabroq narsalarni yozishingiz mumkin:
db.unicorns.find({$where: function() { return this.loves && (this.loves.length > 1) } })
Aytgancha, agar siz mashq qilmoqchi bo'lsangiz,
Kursor xususiyatlari
Keling, bir oz chetga chiqamiz va Monga xususiyatlari haqida bir necha so'z aytamiz:
- find() va boshqa operatsiyalar ma'lumotlarni qaytarmaydi - ular "kursor" deb ataladigan narsani qaytaradi;
- ma'lumotlarning chop etilayotganini ko'rishimiz tarjimonning ishi.
Yozilmoqda db.unicorns.find Qavslarsiz biz taklifni olamiz:
Biz so'rovlarni bajarishda davom etamiz
$in operatori ham mavjud:
db.unicorns.find({weight: {$in: [650, 704]}})
Endi yangilanish haqida gapiraylik. Misol uchun, keling, Rooooodles unicornning vaznini o'zgartiramiz:
db.unicorns.update({name: "Roooooodles"}, {weight: 2222})
Bizning harakatlarimiz natijasida hujjat butunlay yangilanadi, va unda faqat bitta belgilangan maydon qoladi:
Ya'ni, bizning ob'ektimiz uchun faqat 2222 og'irlik va, albatta, id qoladi.
yordamida vaziyatni to'g'irlashingiz mumkin $set:
db.unicorns.update({_id: ObjectId("5da6ea4d9703b8be0089e6db")}, {$set: { "name" : "Roooooodles", "dob" : ISODate("1979-08-18T18:44:00Z"), "loves" : [ "apple" ], "gender" : "m", "vampires" : 99}})
Bu ham mumkin qiymatlarni oshirish:
Va yana bor yuqoriga - yangilash va qo'shish kombinatsiyasi:
Bu qanday amalga oshirilgani haqida maydon tanlash:
Haqida bir necha so'z qo'shish qoladi o'tish и chegara:
Hamkasblar, hammasi shu, agar tafsilotlarni bilmoqchi bo'lsangiz,
Manba: www.habr.com