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:

  1. books kolleksiyasiga insertOne bilan bitta kitob qo’shing va insertedId qiymatini ko’ring.
  2. Yana bitta kitobni qo’shimcha translator maydoni bilan qo’shing — baza e’tiroz bildirmasligini tekshiring.
  3. insertMany bilan uchta kitobni bir buyruqda yozing va insertedIds obyektini o’qing.
  4. db.books.countDocuments() bilan jami sonni sanang.
  5. Bitta hujjatga _id: 100 bering, so’ng insertMany bilan _id: 99, _id: 100, _id: 101 ni yozishga urinib, nechta hujjat tushganini find() bilan tekshiring.
  6. 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

  • insertOne bitta hujjat yozadi va insertedId qaytaradi.
  • insertMany massiv qabul qiladi va insertedIds obyektini qaytaradi.
  • _id yozilmasa MongoDB uni o’zi yaratadi.
  • Bitta kolleksiyadagi hujjatlar har xil maydonlarga ega bo’lishi mumkin — tartibni kod saqlaydi, baza emas.
  • insertMany xatoda 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’qishfind, findOne va birinchi filtrlar.

Bu dars foydali bo'ldimi?

marta ko'rildi