با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، آخرین جلسه از آموزش های MongoDB به ترتیب افزایش خودکار در MongoDB اختصاص داده می شود .MongoDB فاقد قابلیت خودکار افزایشی خارج از باکس مانند پایگاه داده های SQL است. به طور پیش فرض، ۱۲بایت ObjectId برای فیلد _id به عنوان کلید اولیه برای شناسایی اسناد منحصر به فرد است. با این حال ممکن است سناریوهایی وجود داشته باشد که ممکن است بخواهیم فیلد _id دارای مقدار خودکار افزایشی غیر از ObjectId باشد.از آنجا که این یک ویژگی پیش فرض در MongoDB نیست، ما با استفاده از مجموعه ی شمارنده ها به عنوان این قابلیت، با استفاده از مستندات MongoDB، این قابلیت را به دست می آوریم.
از آنجا که این یک ویژگی پیش فرض در MongoDB نیست، ما با استفاده از مجموعه ی counters به عنوان این قابلیت، با استفاده از مستندات MongoDB، این قابلیت را به دست می آوریم.
اسناد products زیر را در نظر بگیرید. ما می خواهیم فیلد _id که یک عدد صحیح است به صورت خودکار افزایش یابد (از ۱،۲،۳،۴ تا n)
1 2 3 4 5 | { "_id":1, "product_name": "Apple iPhone", "category": "mobiles" } |
برای این کار، مجموعه ای از شمارنده ها را ایجاد کنید، که ردیف آخرین مقدار دنباله برای تمام زمینه های دنباله را نگه می دارد.
1 | >db.createCollection("counters") |
اکنون، سند زیر را در مجموعه counters با productid به عنوان کلید آن وارد می کنیم :
1 2 3 4 | { "_id":"productid", "sequence_value": 0 } |
فیلد sequence_value دنباله ای از آخرین مقدار دنباله را نگه می دارد.
برای وارد کردن این سند توالی در مجموعه counters ، از کد زیر استفاده کنید :
1 | >db.counters.insert({_id:"productid",sequence_value:0}) |
اکنون ما یک تابع getNextSequenceValue ایجاد می کنیم که نام توالی را به عنوان ورودی آن وارد می کند،
شماره تکرار را با ۱ افزایش می دهد و شماره توالی به روز رسانی شده را برمی گرداند.
در این مورد، نام توالی productid است.
1 2 3 4 5 6 7 8 9 10 | >function getNextSequenceValue(sequenceName){ var sequenceDocument = db.counters.findAndModify({ query:{_id: sequenceName }, update: {$inc:{sequence_value:1}}, new:true }); return sequenceDocument.sequence_value; } |
اکنون توسط تابع getNextSequenceValue در هنگام ایجاد یک سند جدید، اختصاص مقدار دنباله بازگشتی به فیلد _id سند رامی دهیم.
دو سند نمونه را با استفاده از کد زیر وارد کنید :
1 2 3 4 5 6 7 8 9 10 11 | >db.products.insert({ "_id":getNextSequenceValue("productid"), "product_name":"Apple iPhone", "category":"mobiles" }) >db.products.insert({ "_id":getNextSequenceValue("productid"), "product_name":"Samsung S3", "category":"mobiles" }) |
همانطور که می بینید، از تابع getNextSequenceValue برای تعیین مقدار برای فیلد _id استفاده می کنیم.برای تأیید کارکرد، اسناد را با استفاده از دستور find استخراج کنید :
1 | >db.products.find() |
کوئری بالا اسناد زیر را با داشتن فیلد _id خودکار افزایش می دهد :
1 2 3 | { "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"} { "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" } |
آخرین جلسه از آموزش های پایگاه داده مونگو به اتمام رسید.از شما عزیزان مچکریم که این دوره را با ما گذراندید.این پایگاه داده توانایی out scale کردن و خیلی از ویژگی های پایگاه داده های رابطه ای مثل ایندکس گذاری و دامنه ی کوئری ها و ذخیره سازی را دارا می باشد.