MongoDB nima va nega kerak
Ma’lumotlar bazasi nima darsida ma’lumot jadvallarda saqlanishini ko’rdingiz: ustunlar oldindan belgilanadi, har qator o’sha ustunlarga bo’ysunadi. Endi tasavvur qiling, do’kon mahsulotlarini saqlayapsiz: kitobda sahifa soni bor, futbolkada esa o’lcham va rang. Bitta jadvalga ikkalasini ham joylash qiyin.
MongoDB aynan shu holat uchun boshqa yo’l taklif qiladi: har yozuv o’z maydonlari bilan alohida saqlanadi.
Muammo: qat’iy ustunlar har doim ham mos kelmaydi
SQL bazasida jadval tuzilishi oldindan e’lon qilinadi. Kitoblar uchun shunday yozgan bo’lardingiz:
CREATE TABLE products (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
price INTEGER NOT NULL,
pageCount INTEGER
);
Ertaga futbolka qo’shish kerak bo’ldi. Unda pageCount yo’q, lekin
size va color bor. Ikki yo’l qoladi:
- Jadvalga yana ikki ustun qo’shish — kitob qatorlarida ular bo’sh turadi;
- Alohida jadval yaratish — endi mahsulotlar ikki joyda.
Mahsulot turi o’ntaga yetganda birinchi yo’l bo’sh kataklar dengizini, ikkinchisi esa o’nta jadvalni beradi.
MongoDB qanday saqlaydi
MongoDB’da yuqoridagi ikki mahsulot shunday ko’rinadi:
{
"_id": 1,
"name": "O'tkan kunlar",
"price": 45000,
"pageCount": 384
}
{
"_id": 2,
"name": "Futbolka",
"price": 89000,
"size": "M",
"color": "qora"
}
Ikkalasi ham bitta joyda — products kolleksiyasida yotadi. Hech
qanday ustun oldindan e’lon qilinmagan, ALTER TABLE ham yozilmagan.
Yozuv JSON ga juda o’xshaydi va bu tasodif emas: MongoDB hujjatlari JSON asosidagi formatda saqlanadi.
Uch atama: baza, kolleksiya, hujjat
MongoDB’da uch qatlam bor. Ularni SQL bilan yonma-yon qo’yamiz:
| SQL | MongoDB | Nima |
|---|---|---|
| Baza (database) | Baza (database) | Butun loyihaning ma’lumoti |
| Jadval (table) | Kolleksiya (collection) | Bir turdagi yozuvlar to’plami |
| Qator (row) | Hujjat (document) | Bitta yozuv |
| Ustun (column) | Maydon (field) | Yozuv ichidagi bitta qiymat |
id ustuni |
_id maydoni |
Yozuvni ajratuvchi kalit |
Nomlar boshqa, mantiq yaqin. Shuning uchun SQL bilganingiz bu yerda yo’qolmaydi — ko’p tushuncha shunchaki boshqacha ataladi.
Schema yo’q — bu nimani anglatadi
MongoDB schema-siz (schemaless) deb ataladi. Bu “qoida yo’q” degani emas, “qoidani baza emas, kod belgilaydi” degani.
| Savol | SQL | MongoDB |
|---|---|---|
| Tuzilishni kim tekshiradi | Baza | Ilova kodi |
| Yangi maydon qo’shish | ALTER TABLE kerak |
Shunchaki yoziladi |
| Noto’g’ri maydon nomi | Xato beradi | Jimgina yoziladi |
| Bo’sh maydon | NULL saqlanadi |
Maydon umuman yo’q |
Uchinchi qator — erkinlikning narxi.
Bog’langan ma’lumot: JOIN o’rniga joylash
SQL’da buyurtma va mijoz ikki jadvalda turadi, JOIN ular bog’laydi. MongoDB’da ko’pincha boshqa yo’l tanlanadi — bog’liq ma’lumot hujjatning ichiga joylashtiriladi:
{
"_id": 1,
"total": 134000,
"customer": {
"name": "Aziz Karimov",
"phone": "+998901234567"
},
"items": [
{ "name": "O'tkan kunlar", "quantity": 1, "price": 45000 },
{ "name": "Futbolka", "quantity": 1, "price": 89000 }
]
}
Bitta o’qish — butun buyurtma qo’lingizda. Uchta jadvalni birlashtirish kerak emas.
Bu yondashuv doim yaxshi degani emas. Mijoz telefoni o’zgarsa, uni har bir buyurtmada yangilash kerak bo’ladi. Qachon joylash, qachon ajratish — massiv maydonlar darsida batafsil ko’riladi.
Qachon MongoDB, qachon SQL
Tanlov modaga emas, ma’lumot shakliga bog’liq:
| Holat | Mos keladi |
|---|---|
| Yozuvlar tuzilishi har xil | MongoDB |
| Ma’lumot tabiatan ierarxik (ichma-ich) | MongoDB |
| Tuzilish tez-tez o’zgaradi | MongoDB |
| Ko’p jadval murakkab bog’lanishda | SQL |
| Pul o’tkazmasi, hisob-kitob | SQL |
| Hisobot va murakkab agregatsiya | SQL |
Bu bo’limda nima qilasiz
Yo’l shunday quriladi:
- Muhit — MongoDB o’rnatish va
mongoshbilan ulanish; - CRUD — hujjat qo’shish, o’qish, yangilash va o’chirish;
- Filtr — operatorlar bilan kerakli hujjatni topish;
- Node.js — bazani haqiqiy ilovaga ulash.
Bu bo’limda sahifada kod ishga tushiradigan tugma bo’lmaydi: MongoDB brauzerda emas, serverda ishlaydi. Uning o’rniga har buyruqning kutilgan natijasi ko’rsatiladi — siz o’zingiznikini solishtirasiz.
Amaliy mashq
Kod yozilmaydi — hozircha fikrlash mashqi:
- Ishlatadigan biror ilovangizni tanlang va undagi ma’lumotni bir varaqqa yozing: nimalar saqlanadi (foydalanuvchi, xabar, buyurtma).
- Har biri uchun aniqlang: yozuvlar bir xil tuzilishdami yoki turlichami?
- Yuqoridagi taqqoslash jadvaliga qarab har bir ma’lumot uchun SQL yoki MongoDB tanlang va sababini bitta jumlada yozing.
- O’z telefon kontaktlaringizni MongoDB hujjati shaklida yozib ko’ring — kimningdir ikkita raqami, kimningdir tug’ilgan sanasi bor.
- O’sha kontaktlarni SQL jadvali sifatida yozsangiz nechta ustun kerakligini sanang va nechta katak bo’sh qolishini ko’ring.
- SQL nima darsidagi birinchi
SELECTso’rovini eslang va uni “kolleksiyadan hujjat topish” so’zlari bilan qayta ifodalang.
5-qadam eng ko’rgazmali: bo’sh kataklar soni MongoDB nega paydo bo’lganini bir qarashda tushuntiradi.
Qisqacha xulosa
- MongoDB — ma’lumotni jadval qatorlari emas, hujjat sifatida saqlaydigan baza.
- Hujjat JSON ga o’xshaydi: maydon nomi va qiymat.
- Jadval o’rnida kolleksiya, qator o’rnida hujjat, ustun o’rnida maydon turadi.
- Kolleksiya hujjatlardan bir xil tuzilish talab qilmaydi — erkinlik shu yerda.
- Erkinlikning narxi: xato yozilgan maydon nomi xato bermaydi, jimgina saqlanadi.
- Bog’liq ma’lumot ko’pincha
JOINo’rniga hujjat ichiga joylashtiriladi. - Tanlov ma’lumot shakliga qarab qilinadi, SQL va MongoDB bir-birini inkor etmaydi.
Keyingi darsda MongoDB o’rnatish — bazani
kompyuteringizga qo’yish va mongosh bilan birinchi ulanish.