Skip to content

Document Metodlari

Document - bu collectiondagi individual yozuv (object).

doc(criteria)

Collectiondan documentni tanlaydi.

Parametrlar

  • criteria (object | string | number) - Qidiruv mezoni yoki kalit

Qaytaradi

Ombor instance (method chaining uchun)

Misollar

javascript
// Object mezoni bilan
db.collection('users').doc({ id: 1 })
db.collection('users').doc({ email: 'user@example.com' })

// Kalit bilan
db.collection('users').doc('user-key-123')
db.collection('users').doc(12345)

// Ko'p maydon bilan
db.collection('products').doc({
  category: 'electronics',
  brand: 'Samsung'
})

get()

Tanlangan documentni oladi.

Qaytaradi

Promise<Object>

Misollar

javascript
// ID bo'yicha olish
const user = await db.collection('users')
  .doc({ id: 1 })
  .get()

console.log(user)
// { id: 1, ism: 'Otabek', yosh: 19 }

// Kalit bilan olish
const user = await db.collection('users')
  .doc('user-1')
  .get()

// Email bo'yicha olish
const user = await db.collection('users')
  .doc({ email: 'otabek@example.com' })
  .get()

// Promise bilan
db.collection('users')
  .doc({ id: 1 })
  .get()
  .then(user => console.log(user))
  .catch(err => console.error('Topilmadi:', err))

// Try-catch bilan
async function getUser(id) {
  try {
    const user = await db.collection('users')
      .doc({ id })
      .get()
    return user
  } catch (error) {
    console.error('User topilmadi:', error)
    return null
  }
}

update(data)

Documentni qisman yangilaydi. Faqat berilgan maydonlar yangilanadi.

Parametrlar

  • data (object) - Yangilanadigan maydonlar

Qaytaradi

Promise

Misollar

javascript
// Bitta maydonni yangilash
await db.collection('users')
  .doc({ id: 1 })
  .update({
    email: 'newemail@example.com'
  })

// Ko'p maydonni yangilash
await db.collection('users')
  .doc({ id: 1 })
  .update({
    email: 'newemail@example.com',
    phone: '+998901234567',
    updatedAt: new Date().toISOString()
  })

// Kalit bilan yangilash
await db.collection('users')
  .doc('user-1')
  .update({
    status: 'active'
  })

// Promise bilan
db.collection('users')
  .doc({ id: 1 })
  .update({ yosh: 20 })
  .then(() => console.log('Yangilandi'))
  .catch(err => console.error('Xato:', err))

Muhim!

Agar bir nechta document mezon bo'yicha topilsa, barcha topilgan documentlar yangilanadi:

javascript
// ⚠️ Barcha Samsung mahsulotlarini yangilaydi
await db.collection('products')
  .doc({ brand: 'Samsung' })
  .update({
    discount: 10
  })

// ✅ Faqat bitta mahsulotni yangilash uchun unique maydon ishlating
await db.collection('products')
  .doc({ id: 123 })
  .update({
    price: 1000
  })

set(data)

Documentni to'liq qayta yozadi. Barcha eski maydonlar o'chiriladi.

Parametrlar

  • data (object) - Yangi document ma'lumotlari

Qaytaradi

Promise

Misollar

javascript
// Documentni to'liq qayta yozish
await db.collection('users')
  .doc({ id: 1 })
  .set({
    id: 1,
    ism: 'Yangi ism',
    email: 'yangi@example.com',
    yosh: 25
  })

// Kalit bilan
await db.collection('users')
  .doc('user-1')
  .set({
    id: 1,
    ism: 'Otabek',
    email: 'otabek@example.com'
  })

// Promise bilan
db.collection('users')
  .doc({ id: 1 })
  .set({
    id: 1,
    ism: 'Updated User',
    status: 'active'
  })
  .then(() => console.log('O\'rnatildi'))
  .catch(err => console.error('Xato:', err))

update() vs set()

javascript
// Dastlabki document
// { id: 1, ism: 'Otabek', yosh: 19, email: 'old@example.com' }

// update() - faqat berilgan maydonlar yangilanadi
await db.collection('users')
  .doc({ id: 1 })
  .update({ email: 'new@example.com' })

// Natija:
// { id: 1, ism: 'Otabek', yosh: 19, email: 'new@example.com' }

// set() - butun document qayta yoziladi
await db.collection('users')
  .doc({ id: 1 })
  .set({ id: 1, email: 'new@example.com' })

// Natija:
// { id: 1, email: 'new@example.com' }
// ⚠️ ism va yosh maydonlari o'chib ketdi!

delete()

Documentni o'chiradi.

Qaytaradi

Promise

Misollar

javascript
// ID bo'yicha o'chirish
await db.collection('users')
  .doc({ id: 1 })
  .delete()

// Kalit bilan o'chirish
await db.collection('users')
  .doc('user-1')
  .delete()

// Promise bilan
db.collection('users')
  .doc({ id: 1 })
  .delete()
  .then(() => console.log('O\'chirildi'))
  .catch(err => console.error('Xato:', err))

// Async function ichida
async function deleteUser(id) {
  try {
    await db.collection('users')
      .doc({ id })
      .delete()
    console.log(`User ${id} o'chirildi`)
  } catch (error) {
    console.error('O\'chirishda xato:', error)
  }
}

Muhim!

Agar bir nechta document mezon bo'yicha topilsa, barcha topilgan documentlar o'chiriladi:

javascript
// ⚠️ Barcha admin roleli userlarni o'chiradi
await db.collection('users')
  .doc({ role: 'admin' })
  .delete()

// ✅ Faqat bitta userni o'chirish uchun unique maydon ishlating
await db.collection('users')
  .doc({ id: 123 })
  .delete()

Real loyiha misoli

javascript
// Todo CRUD
class TodoService {
  constructor() {
    this.db = new Ombor('todo-app')
    this.collection = 'todos'
  }

  async create(title) {
    const todo = {
      id: Date.now(),
      title,
      completed: false,
      createdAt: new Date().toISOString()
    }
    await this.db.collection(this.collection).add(todo)
    return todo
  }

  async get(id) {
    return await this.db.collection(this.collection)
      .doc({ id })
      .get()
  }

  async getAll() {
    return await this.db.collection(this.collection)
      .orderBy('createdAt', 'desc')
      .get()
  }

  async toggle(id) {
    const todo = await this.get(id)
    return await this.db.collection(this.collection)
      .doc({ id })
      .update({
        completed: !todo.completed
      })
  }

  async updateTitle(id, newTitle) {
    return await this.db.collection(this.collection)
      .doc({ id })
      .update({
        title: newTitle,
        updatedAt: new Date().toISOString()
      })
  }

  async delete(id) {
    return await this.db.collection(this.collection)
      .doc({ id })
      .delete()
  }

  async deleteCompleted() {
    const todos = await this.getAll()
    const completed = todos.filter(t => t.completed)
    
    for (const todo of completed) {
      await this.delete(todo.id)
    }
  }
}

// Ishlatish
const todoService = new TodoService()

// Yangi todo
const todo = await todoService.create('Omborni o\'rganish')

// Statusni o'zgartirish
await todoService.toggle(todo.id)

// Titleni o'zgartirish
await todoService.updateTitle(todo.id, 'Omborni mukammal o\'rganish')

// O'chirish
await todoService.delete(todo.id)

// Barcha bajarilganlarni o'chirish
await todoService.deleteCompleted()