{"id":48830100,"url":"https://github.com/otabekoff/ombor","last_synced_at":"2026-04-14T20:01:01.416Z","repository":{"id":53740346,"uuid":"326048860","full_name":"otabekoff/ombor","owner":"otabekoff","description":"Ombor- sizga Firebase uslubidagi sodda, kuchli, foydalanuvchi brauzerida saqlanadigan, IndexedDB ma'lumotlar bazasida ishlashni osonlashtiradigan offlayn ma'lumotlar bazasini taqdim etadi.","archived":false,"fork":false,"pushed_at":"2025-10-04T11:11:12.000Z","size":3137,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-26T23:52:55.904Z","etag":null,"topics":["base","baza","local","localbase","mahalliy","mahalliybaza"],"latest_commit_sha":null,"homepage":"https://otabekoff.github.io/ombor/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/otabekoff.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"patreon":"otabek"}},"created_at":"2021-01-01T20:13:31.000Z","updated_at":"2025-10-04T11:11:16.000Z","dependencies_parsed_at":"2025-10-02T22:26:54.256Z","dependency_job_id":"6a31c79b-e72f-4dd9-aada-c1c279c9b574","html_url":"https://github.com/otabekoff/ombor","commit_stats":null,"previous_names":["otabeksadiridinov/mahalliybaza","otabekoff/ombor","otabekoff/mahalliybaza"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/otabekoff/ombor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otabekoff%2Fombor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otabekoff%2Fombor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otabekoff%2Fombor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otabekoff%2Fombor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/otabekoff","download_url":"https://codeload.github.com/otabekoff/ombor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otabekoff%2Fombor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31812977,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"ssl_error","status_checked_at":"2026-04-14T18:05:01.765Z","response_time":153,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["base","baza","local","localbase","mahalliy","mahalliybaza"],"created_at":"2026-04-14T20:01:00.226Z","updated_at":"2026-04-14T20:01:01.404Z","avatar_url":"https://github.com/otabekoff.png","language":"TypeScript","funding_links":["https://patreon.com/otabek"],"categories":[],"sub_categories":[],"readme":"# Ombor \u003c!-- omit in toc --\u003e\n\nFirebasega uslubidagi, offalyn, mahalliy ma'lumotlar bazasi.\n\n\u003e [!NOTE]\n\u003e Learn more in detail at [Ombor Docs](https://otabekoff.github.io/ombor/)\n\nOmbor sizga Firebase uslubidagi sodda, kuchli, foydalanuvchi brauzerida saqlanadigan,IndexedDB ma'lumotlar bazasida ishlashni osonlashtiradigan offlayn ma'lumotlar bazasini taqdim etadi.\n\nSiz xohlagancha ma'lumot bazalarini yaratishingiz mumkin.\n\nMa'lumot bazalari Collectionlar(to'plam) va Documentlar(hujjatlar)ga birlashtirilgan (xuddi Firebase Cloud Firestore kabi).\n\n- **Ma'lumotlar bazalarida collectionlar** mavjud (misol: `foydalanuvchilar`)\n- **Collectionlarda documentlar** mavjud (misol: `{ id: 1, ism: 'Otabek', yosh: 19 }`\n\nOmbor [LocalForage](https://github.com/localForage/localForage) yordamida tuzilgan.\n\n\n## Boshlashdan avval bilib qo'yishingiz yaxshi bo'lgan atamalar.\n\n\u003e Atamalar... Quyida ishlatilish mumkin bo'lgan ma'nolarda keltirildi.\n- **Metod (Method)** - Funksiya, amal. Masalan: `.add()`, `.get()`, `.update()` - bular metodlar.\n- **Order** - Tartib. Ma'lumotlarni qanday tartibda saralash yoki ko'rsatish.\n- **OrderBy** - Bo'yicha tartiblash. Ma'lumotlarni ma'lum bir maydon bo'yicha saralash metodi.\n- **Ascending (asc)** - O'suvchi tartibda. Kichikdan kattaga, A dan Z gacha. Masalan: 1, 2, 3 yoki A, B, C.\n- **Descending (desc)** - Kamayuvchi tartibda. Kattadan kichikka, Z dan A gacha. Masalan: 3, 2, 1 yoki Z, Y, X.\n- **Key(s)** - Kalit. Har bir documentning yagona identifikatori (ID). IndexedDB da saqlash uchun ishlatiladi.\n- **Limit** - Chegara, cheklash. Nechta natija qaytarishni cheklash. Masalan: `.limit(10)` - faqat 10 ta document qaytaradi.\n- **Field** - Maydon. Obyektdagi xususiyat, kalit va qiymat juftligi. Masalan: `{ ism: 'Otabek' }` da `ism` - maydon, `'Otabek'` - qiymat.\n- **Document** - Hujjat yoki ma'lumot. Bitta obyekt, masalan: `{ id: 1, ism: 'Otabek', yosh: 19 }`.\n- **Collection** - To'plam. Documentlar to'plami. Masalan: `foydalanuvchilar` collection - barcha foydalanuvchilar ma'lumotlari.\n- **Databaza yoki Database** - Ma'lumotlar bazasi. Collectionlar saqlanadigan joy. Ombor da siz bir nechta databaza yaratishingiz mumkin.\n- **Add** - Qo'shish. Yangi document qo'shish.\n- **Get** - Olish. Ma'lumotni o'qish, olish.\n- **Update** - Yangilash. Mavjud documentning bir qismini o'zgartirish. Qolgan qismi o'zgarishsiz qoladi.\n- **Set** - O'rnatish. Bu yerda qayta yozish orqali yangilash ma'nosida. Butun documentni almashtirib yozish.\n- **Delete** - O'chirish. Document yoki collectionni o'chirish.\n- **Overwrite** - Ustiga yozish, qayta yozish. Eski ma'lumotni to'liq yangi ma'lumot bilan almashtirish.\n- **Promise** - Va'da. JavaScript'da asinxron operatsiyalarni boshqarish uchun obyekt. `.then()` va `.catch()` bilan ishlaydi.\n- **Async/Await** - Asinxron/Kutmoq. Promiselar bilan ishlashning zamonaviy usuli. Kodni o'qishni osonlashtiradi.\n- **Console** - Konsol. Brauzer dasturchilar vositalari (Dev Tools) da JavaScript kodi natijalarini ko'rish joyi.\n- **Log** - Jurnal, yozuv. Console'ga xabar chiqarish. Masalan: `console.log('Salom')`.\n- **Error** - Xatolik. Dasturda yuz bergan muammo. Masalan: `console.error('Xato yuz berdi')`.\n- **Then** - Keyin. Promise muvaffaqiyatli bo'lganda bajariladigan funksiya. Masalan: `.then(natija =\u003e { ... })`.\n- **Playground** - O'yin maydoni. Kodni sinab ko'rish, tajriba o'tkazish uchun interaktiv muhit. \n\n## Mundarija \u003c!-- omit in toc --\u003e\n\n- [Ishni Boshlash](#ishni-boshlash)\n  - [O'rnatish va ishga tushirish](#ornatish-va-ishga-tushirish)\n    - [Script tegi yordamida](#script-tegi-yordamida)\n    - [NPM bilan](#npm-bilan)\n    - [NuxtJS bilan](#nuxtjs-bilan)\n- [Video Darslik](#video-darslik)\n- [Qisqa Kirish](#qisqa-kirish)\n- [Ma'lumot Qo'shish](#malumot-qoshish)\n  - [Collectionga document qo'shish](#toplamga-document-qoshish)\n  - [Documentni yangilash](#documentni-yangilash)\n  - [Documentni o'rnatish (ustiga yozish)](#documentni-ornatish-ustiga-yozish)\n  - [Collectionni o'rnatish (ustiga yozish)](#toplamni-ornatish-ustiga-yozish)\n- [Ma'lumotni olish](#malumotni-olish)\n  - [Collectionni olish](#toplamni-olish)\n  - [Collectionni tartiblash](#toplamni-tartiblash)\n  - [Collectionni cheklash](#toplamni-checklash)\n  - [Documentni olish](#documentni-olish)\n- [Ma'lumotni o'chirish](#malumotni-ochirish)\n  - [Documentni o'chirish](#documentni-ochirish)\n  - [Collectionni o'chirish](#toplamni-ochirish)\n  - [Ma'lumotlar bazasini o'chirish](#malumotlar-bazasini-ochirish)\n- [Kalitlardan yuqori darajada foydalanish](#kalitlardan-yuqori-darajada-foydalanish)\n  - [Document qo'shish va o'z kalitingizni kiritish](#document-qoshish-va-oz-kalitingizni-kiritish)\n  - [Kalitlarni o'z ichiga olgan collectionni o'rnatish (ustiga yozish)](#kalitlarni-oz-ichiga-olgan-toplamni-ornatish-ustiga-yozish)\n  - [Documentni kalit bilan olish, yangilash, o'rnatish (qayta yozish) yoki o'chirish (document mezonlari o'rniga)](#documentni-kalit-bilan-olish-yangilash-ornatish-qayta-yozish-yoki-ochirish-document-mezonlari-orniga))\n  - [Collectionni olish va kalitlarni ma'lumotlar bilan birga qaytarish.](#toplamni-olish-va-kalitlarni-malumotlar-bilan-birga-qaytarish)\n- [Promiselar bilan ishlash](#promiselar-bilan-ishlash)\n  - [Documentni qo'shib, keyin biron ish bajarish](#documentni-qoshib-keyin-biror-narsa-qilish)\n  - [Documentni yangilab, keyin biron bir ishni bajarish](#documentni-yangilab-keyin-biron-bir-ishni-bajarish)\n  - [Documentni o'rnatib (ustiga yozib), keyin biron ish bajarish](#documentni-ornatib-ustiga-yozib-keyin-biror-narsa-qilish)\n  - [Documentni o'chirib tashlab, keyin biron ish bajarish](#documentni-ochirib-tashlab-keyin-biror-narsa-qilish)\n  - [Collectionni o'chirib tashlab, keyin biron ish bajarish](#toplamni-ochirib-tashlab-keyin-biror-narsa-qilish)\n  - [Ma'lumotlar bazasini o'chirib tashlab, keyin biron ish bajarish](#malumotlar-bazasini-ochirib-tashlab-keyin-biror-narsa-qilish)\n- [Async / Await](#async--await)\n  - [Document qo'shish (Async Await bilan)](#document-qoshish-async-await-bilan)\n  - [Documentlarni yangilash (Async Await bilan)](#documentlarni-yangilash-async-await-bilan)\n  - [Documentlarni o'rnatish (ustiga yozish, Async Await bilan)](#documentlarni-ornatish-ustiga-yozish-async-await-bilan))\n  - [Collectionni olish va xatolarni ushlash (Async Await bilan)](#toplamni-olish-va-xatolarni-ushlash-async-await-bilan))\n- [Sozlash](#sozlash)\n  - [Consoledagi Loglarni o'chirish](#consoledagi-loglarni-ochirish)\n- [Playground](#playground)\n\n\n## Ishni Boshlash\n\n### O'rnatish va ishga tushirish\n\n#### Script tegi yordamida\n\nIshlab chiqish (development) varianti. Ushbu variant siz proyekt ustida ishlayotgan paytingizda tekshirish uchun ancha qulayliklar yaratib beradi. Misol ucun: yangi qo'shilagan, o'zgartirilgan, o'chirilgan va hkz ma'lumotlar to'grisida sizga browseringiz dev-tools(F12 yoki CTRL+SHIFT+I) oynasining console bo'limida rang bilan ajratilgan habarlar yozish imkonini beradi.\n\n```html\n\u003cscript src=\"https://unpkg.com/Ombor/dist/Ombor.dev.js\"\u003e\u003c/script\u003e\n\n\u003cscript\u003e\n  let db = new Ombor('db')\n\u003c/script\u003e\n\n# Yoki\n\n\u003cscript src=\"./Ombor.dev.js\"\u003e\u003c/script\u003e\n\n\u003cscript\u003e\n  let db = new Ombor('db')\n\u003c/script\u003e\n```\n\nYoki, hajmi kichiklashtirilgan, ishlab chiqarish (production) variantidan foydlaning. Bu variantni siz proyektni tamomlaganingizdan keyin foydalanuvchilarga taqdim etganingizda ishlatishingiz mumkin. Bunda, qo'shilgan, yangilangan, o'chirilgan va hkz ma'lumotlar haqida browser dev-tools console bo'limida habarlar ko'rsatilmaydi. Va ishlab chiqish variantiga qaraganda fayl hajmi kamroq bo'ladi.\n```html\n\u003cscript src=\"https://unpkg.com/Ombor/dist/Ombor.min.js\"\u003e\u003c/script\u003e\n\n\u003cscript\u003e\n  let db = new Ombor('db')\n\u003c/script\u003e\n\n# Yoki\n\n\u003cscript src=\"./Ombor.min.js\"\u003e\u003c/script\u003e\n\n\u003cscript\u003e\n  let db = new Ombor('db')\n\u003c/script\u003e\n```\n\n\n\n#### NPM bilan\n\n```\nnpm install Ombor --save\n```\n\n```javascript\nimport Ombor from 'Ombor'\n\nlet db = new Ombor('db')\n```\n\n#### NuxtJS bilan\n```\nnpm install Ombor\n```\n\n```javascript\n// plugins/Ombor.js\n\nimport Ombor from 'Ombor'\nlet db = new Ombor('db')\nexport default (context,inject) =\u003e {\n  inject('db', db)\n}\n```\n\n```javascript\n// nuxt.config.js\n\nexport default {\n  ...\n  plugins: [\n    { src: \"~/plugins/Ombor\", mode: \"client\" }\n  ],\n  ...\n}\n```\n\n```html\n\u003c!-- pages/index.vue --\u003e\n\n\u003cscript\u003e\nexport default {\n  head: {\n    title: 'Nuxt - bosh sahifa'\n  },\n  mounted() {\n    this.$db.collection('foydalanuvchilar').add({\n      id: 1,\n      ism: 'Otabek',\n      yosh: 19\n    })\n  }\n}\n\u003c/script\u003e\n```\n\n## Video Darslik\n\nTez kunda... Videodarslik tayyorlanmoqda.\n\u003c!-- \u003ca href=\"https://www.youtube.com/watch?\" target=\"_blank\"\u003eMening Omborni ishlatish haqidagi videoimni ko'ring\u003c/a\u003e, 0 dan boshlab to'lliq tushuntirilgan: --\u003e\n\n\u003c!-- \u003ca href=\"https://www.youtube.com/watch?v=\" target=\"_blank\"\u003e\n  \u003cimg src=\"images/va-nihoyat-Ombor.png\"\u003e\n\u003c/a\u003e --\u003e\n\n## Qisqa Kirish\n\nTo'plamga(endilikda collection) hujjat/ma'lumot(endilikda document) qo'shish bilan boshlang. `Collection` metodida to'plam nomini kiriting (to'plam avtomatik ravishda yaratiladi), keyin `add` usuli bilan qo'shmoqchi bo'lgan documentni (ma'lumotni) kiriting: \n```javascript\ndb.collection('foydalanuvchilar').add({\n  id: 1,\n  ism: 'Otabek',\n  yosh: 19\n})\n```\nJuda ham oddiy!\n\nCollectionga ba'zi ma'lumotlarni qo'shgandan so'ng, siz `get` metodi bilan butun collectionni olishingiz mumkin:\n```javascript\ndb.collection('foydalanuvchilar').get().then(foydalanuvchilar =\u003e {\n  console.log(foydalanuvchilar)\n})\n\n//  [\n//    { id: 1, ism: 'Otabek', yosh: 19 },\n//    { id: 2, ism: 'Abdulaziz', yosh: 34 }\n//  ]\n```\n\n## Ma'lumot Qo'shish\n\n### Collectionga document qo'shish\n\nMisol uchun:\n\n```javascript\ndb.collection('foydalanuvchilar').add({\n  id: 1,\n  ism: 'Otabek',\n  yosh: 19\n})\n```\n\n### Documentni yangilash\n\nMavjud documentni(qisman yok butunlay) yangilash mumkin. Buning uchun `update` metodidan foydalaning. Documentga mos kelish uchun faqat maydon va qiymat (odatda id) bo'lgan obyektni kiriting.\n\n\u003e Diqqat! agar faqat aynan qaysidir maydonlarning o'zi yangilashi kerak bo'lsa o'sha maydonlarni o'zinigina update metodi ichiga kiriting.\n\n```javascript\ndb.collection('foydalanuvchilar').doc({ id: 1 }).update({\n  ism: 'Abdulaziz'\n})\n\n//  [\n//    { id: 1, ism: 'Abdulaziz', yosh: 19 },\n//    { id: 2, ism: 'Abdulaziz', yosh: 34 }\n//  ]\n```\n\n**Diqqat:** Agar siz bergan mezon bo'yicha bittadan ko'p documentlar topilsa, misol: `.doc({ ism: 'Otabek' })` bo'yicha, unday holatda **barcha** mos tushgan (topilgan) documentlar yangilanadi. \n\n### Documentni o'rnatish (ustiga yozish)\n\nMavjud documentni set() metodi orqali yangilash.\nBunda set() metodi ichida barcha yangilanishi kerak bo'lgan document maydonlari taqdim etilishi kerak. Chunki set() metodi databazadagi collection ichidagi documentga kiritilayotgan yangi maydonlarning o'zini saqlab, eski saqlangan maydonlarni o'chirib yuboradi. Va update() metodi kabi berilgan maydonlarning o'zinigina yangilab, yangisini kiritib, qolganlarini o'z holatida qoldirmaydi. Yani update metodiga o'xshamagan holda, documentni to'liq qayta yozadi. Shuning uchun barcha kerakli maydonlarni `set` metodi ichida berish kerak.\n\n```javascript\ndb.collection('foydalanuvchilar').doc({ id: 2 }).set({\n  id: 4, \n  ism: 'Jakhongir',\n  yosh: 27\n})\n\n//  [\n//    { id: 1, ism: 'Otabek', yosh: 19 },\n//    { id: 4, ism: 'Jakhongir', yosh: 27 }\n//  ]\n```\n\n**Diqqat:** Agar siz bergan mezon bo'yicha bittadan ko'p documentlar topilsa, misol: `.doc({ ism: 'Otabek' })` bo'yicha, unday holatda **barcha** mos tushgan (topilgan) documentlar o'rnatiladi (qayta yoziladi). \n\n### Collectionni o'rnatish (ustiga yozish)\n\n\u003c!-- Overwrite an entire collection with an array of documents. This will completely overwrite the selected collection. --\u003e\nDocumentlarning to'plami bo'lgan butun collection `o'rnatish` metodi bilan qayta yozish orqali yangilanadi.\n\n\n```javascript\ndb.collection('foydalanuvchilar')\n  .set([\n    {\n      id: 1,\n      ism: 'Abdulakhad',\n      yosh: 20\n    },\n    {\n      id: 2, \n      ism: 'Abdurahmon',\n      yosh: 14\n    }\n  ])\n\n//  [\n//    { id: 1, ism: 'Abdulakhad', yosh: 20 },\n//    { id: 2, ism: 'Abdurahmon', yosh: 14 }\n//  ]\n```\n\n## Ma'lumotni olish\n\n### Collectionni olish\n\nCollectiondan barcha narsalarni olish. Collection arrayda qaytariladi.\n\n```javascript\ndb.collection('foydalanuvchilar').get().then(foydalanuvchilar =\u003e {\n  console.log(foydalanuvchilar)\n})\n\n//  [\n//    { id: 1, ism: 'Ahrorxo'ja', yosh: 17 },\n//    { id: 2, ism: 'Ulugbek', yosh: 18 }\n//  ]\n```\n\n### Collectionni tartiblash\n\nCollectionni olish va uni ma'lum bir maydon bo'yicha tartiblash (ascending).\n\n\u003e orderBy metodi ikkita argument qabul qiladi. Birinchisi, qarab tartiblanishi kerak bo'lgan maydon. Ikkinchisi, tartiblanish uslubi. Tartiblanish uslubi ikki hil: 1. asc (ascending yani yuqoriga) va desc (descending pastga) qarab tartiblash.\n\n\n```javascript\ndb.collection('foydalanuvchilar').orderBy('yosh').get().then(foydalanuvchilar =\u003e {\n  console.log('foydalanuvchilar: ', foydalanuvchilar)\n})\n\n//  [\n//    { id: 2, ism: 'Otabek', yosh: 19 },\n//    { id: 1, ism: 'Abdulaziz', yosh: 47 }\n//  ]\n```\n\nCollectionni olish va ma'lum bir maydon bo'yicha tartiblash (descending).\n\n```javascript\ndb.collection('foydalanuvchilar').orderBy('ism', 'desc').get().then(foydalanuvchilar =\u003e {\n  console.log('foydalanuvchilar: ', foydalanuvchilar)\n})\n\n//  [\n//    { id: 2, ism: 'Ulugbek', yosh: 18 },\n//    { id: 1, ism: 'Ahrorxo'ja', yosh: 17 }\n//  ]\n```\n\n### Collectionni checklash\n\nCollection tartiblash va uni ma'lum miqdordagi documentlar bilan checklash.\n\n```javascript\ndb.collection('foydalanuvchilar').orderBy('ism', 'desc').limit(1).get().then(foydalanuvchilar =\u003e {\n  console.log('foydalanuvchilar: ', foydalanuvchilar)\n})\n\n//  [\n//    { id: 2, ism: 'Ulugbek', yosh: 18 }\n//  ]\n```\n\n\n### Documentni olish\n\nCollectiondan individual documentni olish\n\n```javascript\ndb.collection('foydalanuvchilar').doc({ id: 1 }).get().then(document =\u003e {\n  console.log(document)\n})\n\n// { id: 1, ism: 'Abdurahmon', yosh: 14 }\n```\n\n## Ma'lumotni o'chirish\n\n### Documentni o'chirish\nCollectiondan documentni o'chirish.\n```javascript\ndb.collection('foydalanuvchilar').doc({ id: 1 }).delete()\n\n//  [\n//    { id: 2, ism: 'Abdulaziz', yosh: 34 }\n//  ]\n```\n\n**Diqqat:** Agar siz bergan mezon bo'yicha bittadan ko'p documentlar topilsa, misol: `.doc({ ism: 'Otabek' })` bo'yicha, unday holatda **barcha** mos tushgan (topilgan) documentlar o'chiriladi. \n\n### Collectionni o'chirish\nCollectionni va undagi barcha documentlarni o'chirib tashlash.\n```javascript\ndb.collection('foydalanuvchilar').delete()\n```\n\n### Ma'lumotlar bazasini o'chirish\nMa'lumotlar bazasi va undagi barcha documentlarni o'chirib tashlash.\n```javascript\ndb.delete()\n```\n\n## Kalitlardan yuqori darajada foydalanish\n\nSizning documentlaringiz **IndexedDB storeda** `key` bilan saqlanadi:\n\n![IndexedDB Store - Keys](images/indexed-db-keys.png)\n\nOdatda, Ombor bu keylar uchun tasodifiy, tartiblangan, yagona IDlarni yaratadi.\n\nAmmo siz ushbu keylarning (kalitlarning) nomini boshqarishni(o'zgartirishni) xohlashingiz mumkin. Masalan siz:\n- Document qo'shganda o'z keyingizni ko'rsatishingiz.\n- Uni documentlarni tanlash (olayotganda, yangilayotganda, o'rnatayotganda yoki o'chirayotganda) ishlatishingiz\n- Va collectionni olayotganingizda barcha keylarni document maydonlari sifatida qaytarishingiz mumkin. Masalan quyidagidek.\n```javascript\n[\n  {\n    key: 'kalit-2',\n    data: {\n      { id: 2, ism: 'Abdulaziz', yosh: 34 }\n    }\n  },\n  {\n    key: 'kalit-1',\n    data: {\n      { id: 1, ism: 'Adxamboy', yosh: 21 }\n    }\n  }\n]\n```\n\nSiz bularning barchasini Ombor orqali qilishingiz mumkin:\n\n### Document qo'shish va o'z kalitingizni kiritish\n\n\u003c!-- After specifying your document data, pass in a key (to be used by the IndexedDB store) as a second parameter: --\u003e\nDocument ma'lumotlarini kiritgandan so'ng, ikkinchi parametr sifatida (IndexedDB store tomonidan foydalaniladigan) keyni kiriting kiriting:\n\n\n```javascript\ndb.collection('foydalanuvchilar').add({\n  id: 1,\n  ism: 'Otabek',\n  yosh: 19\n}, 'kalit-1')\n```\n\nYoki, siz shunchaki `set` metodini ishlatishingiz mumkin:\n\n```javascript\ndb.collection('foydalanuvchilar').doc('kalit-1').set({\n  id: 1, \n  ism: 'Abdulakhad',\n  yosh: 20\n})\n```\n\nIndexedDB da quyidagicha ko'rinadi:\n\n![IndexedDB Store - Own Keys](images/indexed-db-own-keys.png)\n\n### Kalitlarni o'z ichiga olgan collectionni o'natish (ustiga yozish)\n\n\nTo'liq collectionni documentlar arrayi bilan (qayta yozish orqali) o'rnating va har bir document uchun keyni kiriting. `{keys: true}\" parametri kiritganingizga ishonch hosil qiling. Bu tanlangan collectionni to'liq qayta yozadi.\n\n```javascript\ndb.collection('foydalanuvchilar')\n  .set([\n    {\n      id: 1,\n      ism: 'Otabek',\n      yosh: 19,\n      _key: 'kalit-1'\n    },\n    {\n      id: 2, \n      ism: 'Ulugbek',\n      yosh: 18,\n      _key: 'kalit-2'\n    }\n  ], { keys: true })\n```\n\n### Documentni kalit bilan olish, yangilash, o'rnatish (qayta yozish) yoki o'chirish (document mezonlari o'rniga)\n\nDocumentni `doc`\" metodi bilan tanlayotganda, maydon nomi va qiymati ko'rsatilgan obyekt kiritish o'rniga, shunchaki key bilan string (yoki number) kiriting:\n```javascript\n// kalit bilan docuementni olish\ndb.collection('foydalanuvchilar').doc('kalit-1').get().then(document =\u003e {\n  console.log(document)\n})\n\n// documentni key bilan yangilash\ndb.collection('foydalanuvchilar').doc('kalit-1').update({\n  ism: 'Abdurahmon'\n})\n\n// documentni key bilan o'rnatish\ndb.collection('foydalanuvchilar').doc('kalit-2').set({\n  id: 4, \n  ism: 'Adxamboy',\n  yosh: 21\n})\n\n// documentni key bilan o'chirish\ndb.collection('foydalanuvchilar').doc('kalit-1').delete()\n```\n\n\n### Collectionni olish va kalitlarni ma'lumotlar bilan birga qaytarish.\n\nCollectionni olayotganda, shunchaki `{ keys: true }` ni `get` metodi ichida yozib qo'ying:\n\n```javascript\ndb.collection('foydalanuvchilar').orderBy('ism', 'desc').get({ keys: true }).then(foydalanuvchilar =\u003e {\n  console.log('foydalanuvchilar: ', foydalanuvchilar)\n})\n\n//  [\n  //   {\n  //      key: 'kalit-2',\n  //      data: {\n  //        { id: 1, ism: 'Abdulaziz', yosh: 34 }\n  //      }\n  //    },\n//    {\n//      key: 'kalit-1',\n//      data: {\n//        { id: 2, ism: 'Otabek', yosh:  19}\n//      }\n//    }\n//  ]\n```\n\n## Promiselar bilan ishlash\n\nAmallar muvaffaqiyatli bo'lganida yoki xato yuz berganda, barcha operatsiyalarga promise(va'dalar)ni qo'shishingiz va biror narsa bajarishingiz mumkin.\n\nMisol uchun databazaga yangi collection qo'shilganda, u qo'shilganligi haqida browser dev-tools console bo'limida habar chiqarishingiz mumkin.\n\n### Documentni qo'shib, keyin biron ish bajarish\n\n```javascript\ndb.collection('foydalanuvchilar')\n  .add({\n    id: 1,\n    ism: 'Otabek',\n    yosh: 47\n  }, 'kalit-1')\n  .then(response =\u003e {\n    console.log(\"Qo'shish muavvafaqiyatli amalga oshdi.\")\n  })\n  .catch(error =\u003e {\n    console.log(\"Xatolik yuz berdi, qaytadan harakat qilib ko'ring.\")\n  })\n\n// Siz xatoni add() metodi ichida object o'rniga\n// string, number yoki boolean yozish bilan\n// tekshirib ko'rishingiz mumkin.\n```\n\n### Documentni yangilab, keyin biron bir ishni bajarish\n\n```javascript\ndb.collection('foydalanuvchilar')\n  .doc({ id: 1 })\n  .update({\n    ism: 'Abdurahmon'\n  })\n  .then(response =\u003e {\n    console.log('Yangilash muvaffaqiyatli amalga oshdi.')\n  })\n  .catch(error =\u003e {\n    console.log(\"Xatolik yuz berdi, qaytadan harakat qilib ko'ring.\")\n  })\n  \n// Siz xatolikni update() metodi ichiga hech narsa\n// yozmaslik orqali tekshirib ko'rishingiz mumkin.\n```\n\n### Documentni o'rnatib (ustiga yozib), keyin biron ish bajarish\n\n```javascript\ndb.collection('foydalanuvchilar')\n  .doc({ id: 1 })\n  .set({\n    id: 1, \n    ism: 'Ulugbek',\n    yosh: 27\n  })\n  .then(response =\u003e {\n    console.log(\"O\\'rnatish muvaffaqiyatli amalga oshdi.\")\n  })\n  .catch(error =\u003e {\n    console.log(\"Xatolik yuz berdi, qaytadan harakat qilib ko'ring.\")\n  })\n\n// Siz xatolikni set() metodi ichiga hech narsa\n// yozmaslik orqali tekshirib ko'rishingiz mumkin.\n```\n\n### Documentni o'chirib tashlab, keyin biron ish bajarish\n\n```javascript\ndb.collection('foydalanuvchilar')\n  .doc({ id: 1 })\n  .delete()\n  .then(response =\u003e {\n    console.log(\"O'chirish muvaffaqiyatli amalga oshdi.\")\n  })\n  .catch(error =\u003e {\n    console.log(\"Xatolik yuz berdi, qaytadan harakat qilib ko'ring.\")\n  })\n\n  // Siz xatolikni doc() metodi ichiga hech narsa\n  // yozmaslik orqali tekshirib ko'rishingiz mumkin\n```\n\n### Collectionni o'chirib tashlab, keyin biron ish bajarish\n\n```javascript\ndb.collection('foydalanuvchilar')\n  .delete()\n  .then(response =\u003e {\n    console.log(\"Collection muvaffaqiyatli o'chirildi.\")\n  })\n  .catch(error =\u003e {\n    console.log(\"Xatolik yuz berdi, boshqatdan harakat qilib ko'ring.\")\n  })\n  \n// Siz xatolikni collection() metodi ichiga hech narsa\n// yozmaslik orqali tekshirib ko'rishingiz mumkin\n```\n\n### Ma'lumotlar bazasini o'chirib tashlab, keyin biron ish bajarish\n\n```javascript\ndb.delete()\n  .then(response =\u003e {\n    console.log(\"Ma'lumotlar bazasi muvaffaqiyatli o'chirildi.\")\n  })\n  .catch(error =\u003e {\n    console.log(\"Xatolik yuz berdi, boshqatdan harakat qilib ko'ring.\")\n  })\n  \n// Eslatma: ba'zida ma'lumotlar bazasini o'chirib\n// tashlaganingizda, sahifani qayta yuklamaguningizcha\n// Chrome Dev-tools vositalarida o'zgarish bo'lmaydi\n```\n\n## Async / Await\n\nBundan tashqari, barcha operatsiyalar bilan Async / Await dan foydalanishingiz mumkin\n\n### Document qo'shish (Async Await bilan)\n\n```javascript\nasync function qoshish() {\n  await db.collection('foydalanuvchilar').add({\n    id: 1,\n    ism: 'Otabek',\n    yosh: 19\n  })\n  console.log(\"Birinchi foydalanuvchi qo'shildi\")\n  await db.collection('foydalanuvchilar').add({\n    id: 2,\n    ism: 'Abdulaziz',\n    yosh: 19\n  })\n  console.log(\"Ikkinchi foydalanuvchi qo'shildi\")\n}\nqoshish()\n```\n\n### Documentlarni yangilash (Async Await bilan)\n\n```javascript\nasync function yangilash() {\n  let natija = await db.collection('foydalanuvchilar')\n    .doc({ id: 1 })\n    .update({\n      ism: 'Abdulakhad'\n    })\n  console.log(natija)\n}\nyangilash()\n```\n\n### Documentlarni o'rnatish (ustiga yozish, Async Await bilan)\n\n```javascript\nasync function ornatish() {\n  let natija = await db.collection('foydalanuvchilar')\n    .doc({ id: 2 })\n    .set({\n      id: 4, \n      ism: 'Abdurahmon',\n      yosh: 14\n    })\n    console.log(natija)\n}\nornatish()\n```\n\n### Collectionni olish va xatolarni ushlash (Async Await bilan)\n\n```javascript\nasync function foydalanuvchilarniOlish() {\n  try {\n    let foydalanuvchilar = await db.collection('foydalanuvchilar')\n      .orderBy('yosh')\n      .get()\n    console.log('foydalanuvchilar: ', foydalanuvchilar)\n  }\n  catch(error) {\n    console.log('xatolik: ', error)\n  }\n}\nfoydalanuvchilarniOlish()\n\n// Siz xatolikni collection() metodi ichiga hech narsa\n// yozmaslik orqali tekshirib ko'rishingiz mumkin.\n```\n\n## Sozlash\n\n### Consoledagi Loglarni o'chirish\n\nOdatda, Ombor ishlab chiqish (development) variantida quyidagi kabi ajoyib loglarni browserning dev-tools console bo'limida chiqarib boradi:\n\n![Consoleda chiqadigan loglar](images/console-loglar.png)\n\nSiz bu loglarni `db.config.debug` boolean maydonigaa `false` qiymatini berish orqali o'zgartirishingiz mumkin.\n\nMa'lumotlar bazasini ishga tushirgandan so'ng va boshqa biror narsa bajarishdan oldin quyidagi kodni kiritish kerak:\n\n```javascript\nimport Ombor from 'Ombor'\nlet db = new Ombor('db')\n\ndb.config.debug = false\n\n// Buyog'iga databaza bilan biror narsa qilish kerak\n```\n\n\n\n\n## Playground\n\n🎮 **Interaktiv Playground mavjud!**\n\nOmbor kutubxonasini brauzeringizda bevosita sinab ko'ring! Hech narsa o'rnatmasdan, kodingizni yozib, real vaqtda ishga tushiring.\n\n### ✨ Xususiyatlar\n- **Real-time kod ijrosi** - Brauzerda bevosita ishga tushirish\n- **Console chiqishi** - console.log, error, warn ko'rsatish\n- **6 ta tayyor misol** - CRUD operatsiyalari uchun tayyor kod namunalari\n- **IndexedDB tozalash** - Ma'lumotlar bazasini tozalash funksiyasi\n- **Keyboard shortcuts** - `Ctrl+Enter` / `Cmd+Enter` \n- **Responsive dizayn** - Desktop va mobile qurilmalarda ishlaydi\n- **Dark/Light theme** - VitePress theme bilan mos\n\n### 🚀 Qanday ishlatish?\n\n#### Online (GitHub Pages)\nBevosita brauzeringizda oching:\n**[https://otabekoff.github.io/ombor/playground](https://otabekoff.github.io/ombor/playground)**\n\n#### Local (development)\n```bash\n# Repository'ni clone qiling\ngit clone https://github.com/otabekoff/ombor.git\ncd ombor\n\n# Dependencies'larni o'rnating\nnpm install\n\n# Docs serverini ishga tushiring\nnpm run docs:dev\n\n# Brauzerda oching\n# http://localhost:5173/playground\n```\n\n### 📊 Oddiy misol\n\n```javascript\n// Ma'lumot qo'shish\nconst db = new Ombor('myDatabase')\n\nawait db.collection('users').add({\n  name: 'Otabek',\n  age: 25,\n  city: 'Toshkent'\n})\n\n// Ma'lumotlarni o'qish\nconst users = await db.collection('users').get()\nconsole.log('Foydalanuvchilar:', users)\n```\n\n### 💡 Tayyor misollar\nPlayground'da quyidagi tayyor misollar mavjud:\n1. **Ma'lumot Qo'shish** - `add()` metodi bilan ishlash\n2. **Ma'lumotlarni O'qish** - `get()` metodi\n3. **Filterlash** - `orderBy()` va `limit()`\n4. **Yangilash** - `update()` metodi\n5. **O'chirish** - `delete()` metodi\n6. **Murakkab Misol** - To-Do ilovasi (Full CRUD)\n\n### 🎓 O'xshash playgroundlar\nOmbor Playground quyidagi mashhur playgroundlardan ilhom oldi:\n- [Kotlin Playground](https://play.kotlinlang.org/)\n- [Vue Playground](https://play.vuejs.org/)\n- [W3Schools Tryit Editor](https://www.w3schools.com/tryit/)\n\n### 📚 Ko'proq ma'lumot\n- [Playground hujjatlari](./PLAYGROUND.md)\n- [Developer guide](./PLAYGROUND_DEVELOPMENT.md)\n- [Xususiyatlar ro'yxati](./PLAYGROUND_SUMMARY.md)\n\n\n## Savol yoki takliflar\nUshbu `Ombor` nomli kutubxona borasida savollar, fikrlar, e'tirozlar, Ushbu reponing `issues` bo'limida qoldiring. Shuningdex, xatoliklar bo'lsa, o'zbekcha tarjimalarni yashilash bo'yicha fikrlar bo'lsa ham yuqoridagi `issues` bo'limida qoldiring.\n**Albatta javob beramiz. E'tiboringiz uchun kattakon rahmat.**\n\n\u003e Zero errors, zero warnings, zero vulnerabilities, zero effort.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fotabekoff%2Fombor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fotabekoff%2Fombor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fotabekoff%2Fombor/lists"}