‏نمایش پست‌ها با برچسب بانک اطلاعاتی. نمایش همه پست‌ها
‏نمایش پست‌ها با برچسب بانک اطلاعاتی. نمایش همه پست‌ها

۱۳۹۴/۰۸/۲۳

نوشته شده توسط Reza Alizadeh Majd
دسته بندي: , , , ,

درصورتی که قصد داشته باشیم document هایی از یک collection خاص را براساس شرطی بر روی یکی از فیلد های از نوع آرایه ای آنها پیدا کنیم میتونیم از عبارت $elemMatch بصورت زیر استفاده کنیم:


مثال اول:

فرض میکنیم collection ما شامل موارد زیر باشد:


{ _id: 1, results: [ 82, 85, 88 ] }
{ _id: 2, results: [ 75, 88, 89 ] }


در این صورت برای پیدا کردن document هایی که قیلد result آنها دارای عدد ۸۸ است بصورت زیر عمل میکنیم:

db.collection.find({
    results: { $elemMatch: 88 }
})


همچنین میتوان از شرط های پیچیده تری استفاده نمود:

db.collection.find({
    results: {
        $elemMatch: { $gte: 80, $lt: 85 }
    }
})


مثال دوم (آیتم های آرایه از نوع آبجکت):

فرض میکنیم collection ما شامل موارد زیر باشد:

{ _id: 1, results: [ { product: "abc", score: 10 }, { product: "xyz", score: 5 } ] }
{ _id: 2, results: [ { product: "abc", score: 8 }, { product: "xyz", score: 7 } ] }
{ _id: 3, results: [ { product: "abc", score: 7 }, { product: "xyz", score: 8 } ] }

برای یافتن مواردی که در آنها product ی با مقدار score بزرگتر مساوی 8 باشد بصورت زیر عمل میکنیم:

db.collection.find({
    results: {
        $elemMatch: {
            product: "xyz",
            score: { $gte: 8 }
        }
    }
})


۱۳۹۳/۱۰/۲۵

نوشته شده توسط Reza Alizadeh Majd
دسته بندي: , , , ,

اگه تا بحال راجع به بانک های اطلاعاتی NoSQL شنیده باشید، حتما اسم MongoDB رو هم شنیدید. یک بانک اطلاعاتی Document Based که اطلاعات رو بصورت داکیومنت هایی به فرمت JSON ذخیره میکنه.
الان یه مدته که من هم سر و کارم به این بانک اطلاعاتی افتاده و دارم ازش استفاده میکنم. از این به بعد نکاتی رو که در رابطه با MongoDB بهشون بر میخورم رو هم تو این وبلاگ داکیومنت میکنم تا شاید بعدا به درد خودم یا کس دیگه ای بخوره.

خوب یکی از مواردی که تو کار با MongoDB ممکنه بهش بر بخوریم تغییر نام یک دیتابیس هستش. از اونجایی که خود MongoDB (حداقل تا الان) دستوری رو برای این منظور نداره و باید برای اینکار بصورت دیگه ای عمل کنیم. که در ادامه به چند روش انجام این کار اشاره میکنم:

تغییر نام بوسیله کپی کردن بانک اطلاعاتی:


یکی از روش هایی که برای تغییرنام میتونیم استفاده کنیم کپی بانک و پاک کردن نسخه قدیمی اون از روی سرور هستش، برای اینکار بصورت زیر عمل میکنیم:

> db.copyDatabase('old_database', 'new_database')
> use old_database
> db.dropDatabase()

تغییر نام بوسیله Backup\Restore:


MongoDB برای Backup گیری از بانک ها و همچنین برگردوندن Backup ها دو تا دستور mongodump و mongorestore رو ارائه داده که میشه از اونها برای backup گیری از دیتابیس و برگردوندن backup با اسم جدید از اونها استفاده کرد. برای این منظور بصورت زیر عمل میکنیم:

mongodump --db old_database
mongorestore --db new_database /path/to/old_db_backup

پس از برگردوندن backup به سرور وصل میشیم و نسخه قدیمی رو با دستور dropDatabase پاک میکنیم:

mongo

> use old_database
> db.dropDatabase()

۱۳۹۱/۰۶/۰۶

نوشته شده توسط Reza Alizadeh Majd
دسته بندي: ,
چند وقت پیش یکی از مشتری ها زنگ زد و گزارش داد که هنگام کار با برنامه برق رفته و بعد از وصل مجدد برق دیگه نرم افزار کار نمیکنه، بعد از بررسی دیتابیس نرم افزار دیدم که دیتابیس به حالت "Suspect" رفته و برای همین برنامه نمیتونه به دیتابیس وصل بشه. اون موقع با جستجویی که توی گوگل داشتم به یه Query رسیدم که گفته میشد توی 90درصد موارد مشکل رو رفع میکنه. با اجرای اون Query مشکل حل شد و دیتابیس دوباره قابل استفاده شد.

امروز دوباره همون مشتری تماس گرفت و اعلام کرد که دوباره برق قطع شده و همون مشکل قبلی براشون پیش اومده و من دوباره مجبور به جستجو برای حل مشکل شدم. این دفعه برای اینکه هر دفعه نخوام جستجو کنم، راه حل رفع مشکل رو اینجا مینویسم :

برای رفع مشکل دیتابیس های Suspect شده کافیه Query زیر رو روی دیتابیس اجرا کنیم:


EXEC sp_resetstatus 'yourDBname';
ALTER DATABASE 'yourDBname' SET EMERGENCY
DBCC checkdb('yourDBname')
ALTER DATABASE 'yourDBname' SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB ('yourDBname', REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE 'yourDBname' SET MULTI_USER


با اینکار توی 80، 90 درصد موارد مشکل حل میشه اما اگه نشد توی جستجو هایی که داشتم به این نتیجه رسیدم که چاره ای نیست جز برگردوندن بانک اطلاعاتی.