MongoDB hujjat qo'shish: insertOne va insertMany
Bazaga ma’lumot yozilmasa, undan hech nima o’qib bo’lmaydi. Shuning uchun CRUD amallari yozishdan boshlanadi.
Oldingi darsda bitta hujjatni qo’shgan edingiz. Bu darsda yozishning ikki usuli, qaytgan natija va yo’l qo’yiladigan xatolar ko’riladi.
Barcha misollar uchun bazani tayyorlaymiz:
use shop
switched to db shop
insertOne — bitta hujjat
db.products.insertOne({
name: "O'tkan kunlar",
category: "kitob",
price: 45000,
quantity: 12,
inStock: true
})
{
acknowledged: true,
insertedId: ObjectId('671f4b2c6e7f8a0b1c2d3e42')
}
Javobda ikki maydon bor:
| Maydon | Ma’nosi |
|---|---|
acknowledged |
Baza yozuvni qabul qilganini tasdiqladi |
insertedId |
Yangi hujjatga berilgan _id |
insertedId ni saqlab qo’yish foydali: shu hujjatni keyin topish yoki
yangilash uchun kalit shu.
const result = db.products.insertOne({ name: "Futbolka", price: 89000 })
result.insertedId
ObjectId('671f4b8d9a0b1c2d3e4f5a53')
Har hujjat o’z maydonlariga ega
Ikkinchi hujjatda category va quantity yo’q edi — baza e’tiroz
bildirmadi. Bu birinchi darsda aytilgan
erkinlikning amaliy ko’rinishi.
Uchinchi hujjatni butunlay boshqa maydonlar bilan qo’shamiz:
db.products.insertOne({
name: "Quloqchin",
price: 320000,
warranty: { months: 12, type: "rasmiy" },
colors: ["qora", "oq"]
})
{
acknowledged: true,
insertedId: ObjectId('671f4c159b0c1d2e3f4a5b64')
}
Bitta kolleksiyada uch xil tuzilish — MongoDB uchun normal holat.
insertMany — bir nechta hujjat
Har hujjat uchun alohida buyruq yozish sekin. insertMany massiv qabul
qiladi:
db.products.insertMany([
{ name: "Mehrobdan chayon", category: "kitob", price: 38000, quantity: 7 },
{ name: "Shum bola", category: "kitob", price: 29000, quantity: 20 },
{ name: "Daftar", category: "kanselyariya", price: 8000, quantity: 150 }
])
{
acknowledged: true,
insertedIds: {
'0': ObjectId('671f4d2a1b2c3d4e5f6a7b75'),
'1': ObjectId('671f4d2a1b2c3d4e5f6a7b76'),
'2': ObjectId('671f4d2a1b2c3d4e5f6a7b77')
}
}
Bu safar insertedIds — obyekt: kalit massivdagi tartib raqami, qiymat
yaratilgan _id.
Nechta hujjat borligini sanaymiz:
db.products.countDocuments()
6
Xato chiqqanda nima bo’ladi
insertMany standart holda tartib bilan ishlaydi: hujjatlarni
ketma-ket yozadi va birinchi xatoda to’xtaydi.
Sinab ko’ramiz. Avval ma’lum _id bilan hujjat qo’shamiz:
db.tests.insertOne({ _id: 2, name: "Ikkinchi" })
{ acknowledged: true, insertedId: 2 }
Endi shu _id ni o’rtaga qo’yib, uchta hujjat yozishga urinamiz:
db.tests.insertMany([
{ _id: 1, name: "Birinchi" },
{ _id: 2, name: "Takror" },
{ _id: 3, name: "Uchinchi" }
])
MongoBulkWriteError: E11000 duplicate key error collection: shop.tests index: _id_ dup key: { _id: 2 }
Result: BulkWriteResult {
insertedCount: 1,
...
}
Natijani tekshiramiz:
db.tests.find()
[
{ _id: 1, name: 'Birinchi' },
{ _id: 2, name: 'Ikkinchi' }
]
Birinchi hujjat yozildi, ikkinchisida xato chiqdi, uchinchisiga umuman yetib borilmadi.
ordered: false — qolganini davom ettirish
Bitta xato qolgan hujjatlarni to’xtatmasligi kerak bo’lsa, tartibni o’chiring:
db.tests.insertMany(
[
{ _id: 3, name: "Uchinchi" },
{ _id: 2, name: "Yana takror" },
{ _id: 4, name: "To'rtinchi" }
],
{ ordered: false }
)
MongoBulkWriteError: E11000 duplicate key error collection: shop.tests index: _id_ dup key: { _id: 2 }
Result: BulkWriteResult {
insertedCount: 2,
...
}
db.tests.find()
[
{ _id: 1, name: 'Birinchi' },
{ _id: 2, name: 'Ikkinchi' },
{ _id: 3, name: 'Uchinchi' },
{ _id: 4, name: "To'rtinchi" }
]
Xato baribir chiqdi, lekin _id: 4 yozildi: baza takror hujjatni
o’tkazib yuborib, qolganini davom ettirdi.
| Rejim | Xatoda | Qachon |
|---|---|---|
ordered: true (standart) |
To’xtaydi | Tartib muhim bo’lsa |
ordered: false |
Davom etadi | Katta ro’yxatni yuklashda |
Sana va vaqtni yozish
Yozilgan vaqtni saqlash deyarli har loyihada kerak bo’ladi:
db.orders.insertOne({
customer: "Aziz",
total: 134000,
createdAt: new Date()
})
{
acknowledged: true,
insertedId: ObjectId('671f4e6b2c3d4e5f6a7b8c86')
}
db.orders.findOne()
{
_id: ObjectId('671f4e6b2c3d4e5f6a7b8c86'),
customer: 'Aziz',
total: 134000,
createdAt: ISODate('2026-10-04T11:22:03.517Z')
}
Amaliy mashq
use library bazasida bajaring:
bookskolleksiyasigainsertOnebilan bitta kitob qo’shing vainsertedIdqiymatini ko’ring.- Yana bitta kitobni qo’shimcha
translatormaydoni bilan qo’shing — baza e’tiroz bildirmasligini tekshiring. insertManybilan uchta kitobni bir buyruqda yozing vainsertedIdsobyektini o’qing.db.books.countDocuments()bilan jami sonni sanang.- Bitta hujjatga
_id: 100bering, so’nginsertManybilan_id: 99,_id: 100,_id: 101ni yozishga urinib, nechta hujjat tushganinifind()bilan tekshiring. - Shu buyruqni
{ ordered: false }bilan takrorlang va farqni solishtiring.
5 va 6-qadamlar juftligi eng qimmatli: ko’p ma’lumot yuklaganda qaysi rejim kerakligini shu farq belgilaydi.
Qisqacha xulosa
insertOnebitta hujjat yozadi vainsertedIdqaytaradi.insertManymassiv qabul qiladi vainsertedIdsobyektini qaytaradi._idyozilmasa MongoDB uni o’zi yaratadi.- Bitta kolleksiyadagi hujjatlar har xil maydonlarga ega bo’lishi mumkin — tartibni kod saqlaydi, baza emas.
insertManyxatoda to’xtaydi, lekin oldin yozilganlarni orqaga qaytarmaydi.{ ordered: false }xatodan keyin qolgan hujjatlarni yozishda davom ettiradi.- Sana
new Date()bilan yoziladi, matn sifatida emas.
Keyingi darsda hujjat o’qish — find,
findOne va birinchi filtrlar.