MongoDB Compass va mongosh — asosiy ishlatish
Muammodan boshlaylik
MongoDB o'rnatildi. Lekin hozir ichida nima bor? Qanday ko'raman? Buyruq yozish kerakmi, yoki oynali dastur bormi?
MongoDB bilan ishlashning ikki yo'li bor:
- mongosh — terminal, matn buyruqlari
- MongoDB Compass — grafik interfeys, sichqoncha bilan
Ikkalasini bilib olish muhim: Compass tez ko'rish uchun, mongosh real ishda. Ko'pchilik ikkalasini birgalikda ishlatadi.
MongoDB Compass — grafik interfeys
Compass — MongoDB ning rasmiy GUI (grafik interfeys) dasturi. O'rnatish kerak bo'lsa: https://www.mongodb.com/try/download/compass
Compass qanday ko'rinadi
┌─────────────────────────────────────────────────────────────────┐
│ MongoDB Compass _ □ × │
├──────────────┬──────────────────────────────────────────────────┤
│ │ │
│ ○ localhost │ maktab > talabalar │
│ │ │
│ ▼ maktab │ ┌─────────────────────────────────────────────┐ │
│ talabalar │ │ Documents Aggregations Schema ... │ │
│ o_qituvch │ ├─────────────────────────────────────────────┤ │
│ │ │ FILTER { } [FIND] [RESET] │ │
│ ▶ admin │ ├─────────────────────────────────────────────┤ │
│ ▶ local │ │ _id: ObjectId("64a1...") │ │
│ │ │ ism: "Jasur" │ │
│ │ │ yosh: 24 │ │
│ │ │ shahar: "Toshkent" │ │
│ │ ├─────────────────────────────────────────────┤ │
│ │ │ _id: ObjectId("64a2...") │ │
│ │ │ ism: "Malika" │ │
│ │ │ yosh: 22 │ │
│ │ │ shahar: "Samarqand" │ │
│ │ └─────────────────────────────────────────────┘ │
└──────────────┴──────────────────────────────────────────────────┘
Chap panel: databaselar va collectionlar daraxt shaklida. O'ng panel: tanlangan collection ning documentlari.
Compass ga ulanish
Compass ochilganda ulanish oynasi ko'rinadi:
┌──────────────────────────────────────────────┐
│ New Connection │
│ │
│ URI: mongodb://localhost:27017 │
│ │
│ yoki qo'lda: │
│ Host: localhost Port: 27017 │
│ Authentication: None (hozircha) │
│ │
│ [ Connect ] │
└──────────────────────────────────────────────┘
Lokal o'rnatish uchun standart URI: mongodb://localhost:27017
Shunchaki "Connect" bosing — hamma narsa tayyor.
Compass panellari — nima uchun nima
Biror collectionni ochganda yuqorida 5 ta tab ko'rinadi:
┌────────────┬───────────────┬────────┬──────────┬──────────┐
│ Documents │ Aggregations │ Schema │ Indexes │ Explain │
└────────────┴───────────────┴────────┴──────────┴──────────┘
↑ ↑ ↑ ↑ ↑
Ma'lumot Pipeline Maydon Index So'rov
ko'rish qurish tahlili boshqarish rejasi
Documents — documentlarni ko'rish, filter, tahrirlash, o'chirish.
Aggregations — pipeline ni sichqoncha bilan bosqichma-bosqich qurish. Har bosqich natijasini darhol ko'rish mumkin.
Schema — collection dagi maydonlarni tahlil qiladi:
┌─────────────────────────────────────────────────────┐
│ Schema Analysis │
├──────────────┬──────────┬────────────────────────── │
│ Field │ Type │ Distribution │
├──────────────┼──────────┼────────────────────────── │
│ _id │ ObjectId │ ████████████████ 100% │
│ ism │ String │ ████████████████ 100% │
│ yosh │ Int32 │ ████████████████ 100% │
│ shahar │ String │ ████████████ 87% │
│ telefon │ Array │ ████████ 50% │
└──────────────┴──────────┴────────────────────────── │
shahar faqat 87% documentda bor — ya'ni 13% document da bu
maydon yo'q. Schema tab bu farqlarni darhol ko'rsatadi.
Indexes — mavjud indexlar ro'yxati, yangi index yaratish.
Explain Plan — so'rov qanday bajarilishini vizual ko'rsatadi (keyingi darslarda batafsil).
Documents tabida filter yozish
┌─────────────────────────────────────────────────────┐
│ FILTER { yosh: { $gt: 20 } } [FIND] │
└─────────────────────────────────────────────────────┘
Filter maydoniga oddiy MongoDB query yozing. Compass darhol
natijani ko'rsatadi. Bu mongosh da db.talabalar.find(...) ga
teng.
mongosh — terminal interfeysi
mongosh — MongoDB ning zamonaviy shell i. mongo ning yangi versiyasi.
mongosh ni ishga tushirish
mongosh
Ulanish muvaffaqiyatli bo'lsa:
Current Mongosh Log ID: 64a1f2c3b4e5f6a7b8c9d0e1
Connecting to: mongodb://127.0.0.1:27017/
Using MongoDB: 8.0.0
Using Mongosh: 2.3.0
test>
test> — bu prompt. Hozir test database ichida turibsiz.
mongosh navigatsiyasi
mongosh prompt: test>
↑
joriy database
Asosiy navigatsiya buyruqlari:
// Barcha databaselarni ko'rish
show dbs
// Natija:
// admin 40 kB
// local 72 kB
// maktab 8 kB
// Database tanlash (yoki yaratish)
use maktab
// maktab>
// Joriy database
db
// maktab
// Barcha collectionlarni ko'rish
show collections
// talabalar
// o_qituvchilar
mongosh da buyruqlar ko'rinishi
Bir amaliy seansni ko'raylik. Bosqichma-bosqich nima bo'layotgani ko'rsatilgan:
test> use maktab
maktab>
↑ database o'zgardi
maktab> db.talabalar.insertOne({ ism: "Jasur", yosh: 24, shahar: "Toshkent" })
{
acknowledged: true,
insertedId: ObjectId('64a1f2c3b4e5f6a7b8c9d0e1')
↑ MongoDB avtomatik ID yaratdi
}
maktab> db.talabalar.insertOne({ ism: "Malika", yosh: 22, shahar: "Samarqand" })
{
acknowledged: true,
insertedId: ObjectId('64a1f2c3b4e5f6a7b8c9d0e2')
}
maktab> db.talabalar.find()
[
{
_id: ObjectId('64a1f2c3b4e5f6a7b8c9d0e1'),
ism: 'Jasur',
yosh: 24,
shahar: 'Toshkent'
},
{
_id: ObjectId('64a1f2c3b4e5f6a7b8c9d0e2'),
ism: 'Malika',
yosh: 22,
shahar: 'Samarqand'
}
]
mongosh buyruqlar — cheat sheet
┌─────────────────────────────────────────────────────────────┐
│ NAVIGATSIYA │
├─────────────────────────┬───────────────────────────────── │
│ show dbs │ Barcha databaselar │
│ use <db> │ Database tanlash │
│ db │ Joriy database nomi │
│ show collections │ Joriy db dagi collectionlar │
│ db.stats() │ DB statistikasi │
├─────────────────────────┼───────────────────────────────── │
│ COLLECTION │ │
├─────────────────────────┼───────────────────────────────── │
│ db.col.find() │ Hammani ko'rish │
│ db.col.find({...}) │ Filter bilan │
│ db.col.findOne({...}) │ Birinchi topilganni │
│ db.col.countDocuments()│ Soni │
│ db.col.insertOne({}) │ Bitta qo'shish │
│ db.col.insertMany([]) │ Ko'p qo'shish │
│ db.col.updateOne() │ Bitta yangilash │
│ db.col.deleteOne() │ Bitta o'chirish │
│ db.col.drop() │ Collection ni o'chirish │
├─────────────────────────┼───────────────────────────────── │
│ DATABASE │ │
├─────────────────────────┼───────────────────────────────── │
│ db.dropDatabase() │ Databaseni o'chirish │
├─────────────────────────┼───────────────────────────────── │
│ YORDAMCHI │ │
├─────────────────────────┼───────────────────────────────── │
│ exit yoki Ctrl+C │ Chiqish │
│ cls │ Ekranni tozalash │
│ ↑ ↓ (strelka) │ Oldingi buyruqlar tarixi │
│ Tab │ Avtoto'ldirish │
└─────────────────────────┴───────────────────────────────── │
Tab avtoto'ldirish — foydali xususiyat
mongosh da Tab bosish — kodni yakunlab beradi:
maktab> db.tal[Tab]
maktab> db.talabalar
maktab> db.talabalar.f[Tab]
find() findOne() findOneAndDelete() findOneAndReplace() ...
maktab> db.talabalar.find[Tab]
maktab> db.talabalar.find()
To'g'ri yozishni esda saqlash shart emas — Tab yordam beradi.
mongosh — ko'p qatorli kod
Katta JSON yozishda mongosh avtomatik aniqlaydi — qavslar yopilmagan bo'lsa, yangi qator kutadi:
maktab> db.talabalar.insertOne({
... ism: "Bobur",
... yosh: 26,
... manzil: {
... shahar: "Toshkent",
... tuman: "Yunusobod"
... }
... })
... — mongosh davom etishingizni kutayapti. Oxirgi }) yopilgach
bajaradi.
.find() natijasini chiroyli ko'rsatish
Ko'p document bo'lsa, chiqish qisqartiriladi. Barchasini ko'rish:
// Standart — ba'zi documentlar ... bilan qisqartirilishi mumkin
db.talabalar.find()
// Barchasini ko'rish — forEach bilan
db.talabalar.find().forEach(doc => printjson(doc))
Compass vs mongosh — qachon nima ishlatish
┌────────────────────┬────────────────────────────────────────┐
│ Vazifa │ Tavsiya │
├────────────────────┼────────────────────────────────────────┤
│ Ma'lumot ko'rish │ Compass — vizual, qulay │
│ Schema tekshirish │ Compass — Schema tab │
│ Index ko'rish │ Compass — Indexes tab │
│ Pipeline sinash │ Compass — Aggregations tab │
│ Tez query │ mongosh — tez, to'g'ridan-to'g'ri │
│ Script yozish │ mongosh — .js fayl ishlatish mumkin │
│ Server da ishlash │ mongosh — GUI yo'q, faqat terminal │
│ Avtomatlashtirish │ mongosh — bash + cron bilan │
└────────────────────┴────────────────────────────────────────┘
Real hayotda: Compass da ma'lumotni ko'rasiz, tuzilishni tushunasiz, so'ngra mongosh yoki Mongoose da yozasiz.
Amaliy mashq — birgalikda bajaraylik
Bu qadamlarni o'zingiz bajaring. Har qadam tekshiriladigan natija beradi.
Qadam 1 — database va ma'lumotlar yaratish
use maktab
db.talabalar.insertMany([
{ ism: "Jasur", yosh: 24, shahar: "Toshkent", fan: "Matematika" },
{ ism: "Malika", yosh: 22, shahar: "Samarqand", fan: "Biologiya" },
{ ism: "Bobur", yosh: 25, shahar: "Toshkent", fan: "Fizika" },
{ ism: "Zulfiya",yosh: 21, shahar: "Namangan", fan: "Kimyo" },
{ ism: "Sardor", yosh: 23, shahar: "Toshkent", fan: "Matematika" }
])
Natija:
{
acknowledged: true,
insertedIds: {
'0': ObjectId('...'),
'1': ObjectId('...'),
...
}
}
Qadam 2 — ko'rish
// Barchasi
db.talabalar.find()
// Faqat Toshkentliklar
db.talabalar.find({ shahar: "Toshkent" })
// Natija:
// Jasur, Bobur, Sardor — 3 ta document
Qadam 3 — sanaymiz
db.talabalar.countDocuments()
// 5
db.talabalar.countDocuments({ shahar: "Toshkent" })
// 3
Qadam 4 — Compass da ko'rish
Compass ni oching → maktab → talabalar → Documents tab.
Siz qo'shgan 5 ta document ko'rinadi.
Filter ga { shahar: "Toshkent" } yozing → Find bosing →
faqat Toshkentliklar qoladi.
Tez-tez uchraydigan xatolar
mongosh ulanmaydi — "MongoNetworkError"
MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017
MongoDB service ishlamayapti. Avval uni ishga tushiring:
# Linux
sudo systemctl start mongod
# Mac
brew services start mongodb-community
# Docker
docker start mongodb
Sabab: mongosh server bilan gaplashadi. Server to'xtagan bo'lsa, gaplashadigan hech kim yo'q — ulanish rad etiladi.
"use maktab" deb database yaratdim, lekin "show dbs" da ko'rinmaydi
MongoDB bo'sh databaseni ro'yxatga qo'shmaydi. Kamida bitta
document qo'shilgach, database show dbs da paydo bo'ladi.
use maktab
show dbs // maktab ko'rinmaydi — bo'sh
db.test.insertOne({ a: 1 })
show dbs // maktab endi ko'rinadi
Compass da "Authentication failed"
Docker yoki Atlas da parol bilan o'rnatilgan bo'lsa, URI ga foydalanuvchi va parol qo'shing:
mongodb://admin:maxfiysoz@localhost:27017
mongosh da .find() faqat 20 ta document ko'rsatadi
Bu normaldir — mongosh 20 tadan ko'p natijani to'g'ridan-to'g'ri bosmaslik uchun chegaralaydi. Davomini ko'rish:
db.talabalar.find()
// ... 20 ta ...
// Type "it" for more
it // ← keyingi 20 ta
Yoki hammasini bir yo'la:
db.talabalar.find().toArray()
Xulosa
- Compass — vizual interfeys: ko'rish, filter, schema tahlil, pipeline sinash
- mongosh — terminal: tez query, scripting, server da ishlash
- Ikkalasi bir-birini to'ldiradi — Compass tushunish uchun, mongosh ishlash uchun
use <db>— database tanlash;show collections— collectionlar.find()— ko'rish;.insertOne()— qo'shish;.countDocuments()— sanash- Bo'sh database
show dbsda ko'rinmaydi — document qo'shilgach paydo bo'ladi
Keyingi dars: 4-dars — Database, Collection, Document: tuzilishi, BSON nima