2-bo‘lim

mongosh bilan ishlash

Serverga ulanish, use bilan baza tanlash, to'plam yaratish, birinchi hujjatlarni qo'shish va ro'yxatlarni ko'rish buyruqlari.

🕑 13 daqiqa o‘qish 📄 724 so‘z 👁 2 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Ulanish
  2. Baza tanlash
  3. Birinchi hujjatlar
  4. O'qish
  5. Ro'yxatlar
  6. Hujjatni o'zgartirish va o'chirish
  7. mongosh - bu JavaScript
  8. Foydali qulayliklar
  9. Xulosa

mongosh - MongoDB ning rasmiy buyruq qatori mijozi. U JavaScript muhiti ustiga qurilgan, shuning uchun unda o'zgaruvchi e'lon qilish va sikl yozish ham mumkin.

Ulanish #

Eng oddiy holatda mongosh o'z kompyuteringizdagi serverga ulanadi:

Natija
mongosh

To'liq manzil bilan ulanish:

Natija
mongosh "mongodb://127.0.0.1:27017"
QismMa'nosi
mongodb://Protokol nomi
127.0.0.1Server manzili
27017Port - MongoDB ning odatiy porti

Ulangandan keyin taklif satri quyidagicha ko'rinadi:

Natija
test>

test - bu hozir tanlangan baza nomi.

Baza tanlash #

Natija
use dokon
Natija
switched to db dokon
Baza yo'q bo'lsa ham use ishlaydi

use dokon yozganda MongoDB "bunday baza yo'q" demaydi. Aksincha, u shu nomni eslab qoladi va birinchi hujjat yozilganda bazani o'zi yaratadi.

To'plamlar ham xuddi shunday: db.kitob.insertOne(...) yozilganda kitob to'plami avtomatik paydo bo'ladi.

AmalQachon haqiqatan yaratiladi
use dokonBirinchi yozuvda
db.kitob.insertOne(...)Darhol
db.kitob.find()Hech qachon - o'qish yaratmaydi

Shuning uchun show dbs ro'yxatida yangi baza darrov ko'rinmasligi mumkin. Bu xato emas: u hali bo'sh.

MongoDB tuzilmasi to'rt bosqichdan iborat Server (mongod) - 27017-port Baza: dokon To'plam: kitob hujjat, hujjat, hujjat ... To'plam: mijoz hujjat, hujjat, hujjat ... Baza: hisobot To'plam: kunlik boshqa bazadagi to'plam Bazalar bir-biridan mustaqil Nomlar to'qnashmaydi Bitta serverda ko'p baza, bitta bazada ko'p to'plam, bitta to'plamda ko'p hujjat
SQL dagi baza va jadval bilan solishtiring - tuzilma deyarli bir xil

Birinchi hujjatlar #

Bazaga uchta kitob qo'shamiz. Shu ma'lumot bu bobdagi barcha misollarda ishlatiladi:

JavaScript
db.kitob.insertMany([
  { _id: 1, nom: "Otkan kunlar", narx: 85000 },
  { _id: 2, nom: "Navoiy",       narx: 95000 },
  { _id: 3, nom: "Ufq",          narx: 64000 }
])

Xuddi shu usulda ikkinchi to'plamni ham yaratish mumkin - use yoki create buyrug'i kerak emas:

JavaScript
db.mijoz.insertMany([
  { _id: 1, ism: "Husanboy", shahar: "Namangan" },
  { _id: 2, ism: "Malika",   shahar: "Namangan" }
])
Natija
{ acknowledged: true, insertedIds: { '0': 1, '1': 2 } }

insertedIds - qo'shilgan hujjatlarning kalitlari. Biz _id ni o'zimiz berganimiz uchun ular oddiy sonlar.

O'qish #

JavaScript
db.kitob.find()
Natija
[
  { _id: 1, nom: 'Otkan kunlar', narx: 85000 },
  { _id: 2, nom: 'Navoiy', narx: 95000 },
  { _id: 3, nom: 'Ufq', narx: 64000 }
]

Bitta hujjatni olish:

JavaScript
db.kitob.findOne({ nom: "Navoiy" })
Natija
{ _id: 2, nom: 'Navoiy', narx: 95000 }
find va findOne farqi

Ikkalasi bir xil ko'rinsa ham, qaytaradigan narsasi boshqacha:

MetodQaytaradiHech narsa topilmasa
find()Kursor - hujjatlar oqimiBo'sh natija
findOne()Bitta hujjat yoki nullnull

Amaliy farq: findOne() natijasidan darhol maydon olish mumkin - doc.narx. find() natijasidan esa olib bo'lmaydi, chunki u kursor.

Dastur yozayotganda esa yana bir farq bor: find() natijasini aylanib chiqish kerak, findOne() esa tayyor obyekt beradi.

Ro'yxatlar #

Server, baza va to'plam haqida ma'lumot olish uchun qisqa buyruqlar bor:

BuyruqNima ko'rsatadi
show dbsServerdagi barcha bazalar
show collectionsJoriy bazadagi to'plamlar
dbJoriy baza nomi
db.kitob.countDocuments()To'plamdagi hujjatlar soni
db.stats()Baza hajmi haqida ma'lumot
JavaScript
db.getName()
db.kitob.countDocuments()
db.getCollectionNames()
Natija
dokon
3
[ 'kitob' ]

Hujjatni o'zgartirish va o'chirish #

JavaScript
db.kitob.updateOne({ _id: 3 }, { $set: { narx: 70000 } })
db.kitob.findOne({ _id: 3 })
Natija
{
  acknowledged: true,
  insertedId: null,
  matchedCount: 1,
  modifiedCount: 1,
  upsertedCount: 0
}
{ _id: 3, nom: 'Ufq', narx: 70000 }
JavaScript
db.kitob.countDocuments()
db.kitob.deleteOne({ _id: 3 })
db.kitob.countDocuments()
Natija
3
{ acknowledged: true, deletedCount: 1 }
2

mongosh - bu JavaScript #

Oddiy mijozdan farqli, mongosh da to'liq dastur yozish mumkin:

JavaScript
const chegara = 80000
const qimmat = db.kitob.find({ narx: { $gte: chegara } }).toArray()
qimmat.map(k => k.nom + " - " + (k.narx / 1000) + " ming")
Natija
[ 'Otkan kunlar - 85 ming', 'Navoiy - 95 ming' ]

toArray() kursorni oddiy JavaScript massiviga aylantiradi - shundan keyin map, filter kabi odatiy metodlar ishlaydi.

toArray() ni katta to'plamda ishlatmang

toArray() barcha hujjatlarni xotiraga yuklaydi.

Uch dona hujjatda bu muammo emas. Bir million hujjatda esa mongosh (yoki dasturingiz) xotirani to'ldirib to'xtab qolishi mumkin.

To'g'ri yo'llar:

MaqsadYechim
Faqat bir nechtasi kerak.limit(20)
Hammasini aylanib chiqishforEach - hujjatlar birma-bir keladi
Faqat son kerakcountDocuments()
Umumlashtirish kerakAgregatsiya quvuri (12-bob)

Kursorning butun mohiyati shunda: u hujjatlarni kerak bo'lganda olib keladi, hammasini oldindan emas.

Foydali qulayliklar #

AmalBuyruq
Yordam olishdb.kitob.help()
Chiqishni tekislash.pretty() (8.x da avtomatik)
Oxirgi buyruqni takrorlashYuqoriga strelka
Chiqishni tozalashcls
Chiqishdan chiqish.exit yoki Ctrl+D
Fayldan skript ishlatishmongosh --file skript.js
Amaliy topshiriq
  1. mongosh ni ishga tushiring va ulanganini tekshiring.
  2. use dokon bilan yangi baza tanlang.
  3. show dbs da u ko'rinadimi - tekshiring va sababini yozing.
  4. insertMany bilan uchta hujjat qo'shing.
  5. Endi show dbs da baza paydo bo'ldimi - qayta tekshiring.
  6. find() va findOne() natijalarini solishtiring.
  7. updateOne bilan bitta narxni o'zgartiring.
  8. deleteOne bilan bitta hujjatni o'chiring.
  9. countDocuments() bilan qolgan sonni bilib oling.
  10. toArray() nima uchun xavfli bo'lishi mumkinligini tushuntiring.

Xulosa #

  • mongosh - MongoDB ning rasmiy mijozi va to'liq JavaScript muhiti.
  • Odatiy port - 27017.
  • use <baza> bazani tanlaydi; baza va to'plam birinchi yozuvda yaratiladi.
  • Shuning uchun bo'sh baza show dbs ro'yxatida ko'rinmaydi.
  • insertOne va insertMany hujjat qo'shadi.
  • find() kursor, findOne() esa bitta hujjat yoki null qaytaradi.
  • updateOne yangilaydi, deleteOne o'chiradi - ikkalasi ham filtr oladi.
  • toArray() hammasini xotiraga yuklaydi - katta to'plamda limit yoki forEach ishlating.
  • Kursorning mohiyati - hujjatlarni kerak bo'lganda olib kelish.
  • show collections, db.getName(), countDocuments() - kundalik tekshiruv buyruqlari.

Keyingi bo'limda hujjat ichida qanday turlar saqlanishini - BSON turlarini ko'ramiz.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.