Latest web development tutorials

MongoDB زيادة تلقائيا

MongoDB ليس هناك نفس قدرات SQL لزراعة تلقائيا، _ID MongoDB هو 12 بايت يعرف بشكل فريد نظام إنشاؤه تلقائيا.

ومع ذلك، في بعض الحالات، قد نحتاج إلى تنفيذ ObjectId ميزة النمو التلقائي.

لأن MongoDB لا تنفذ هذه الميزة، ونحن يمكن برمجتها لتحقيق، وسوف نحقق مجال _ID التالية تنمو تلقائيا يتعارض جمع.


جمع استخدام العدادات

النظر في وثائق المنتجات التالية. نأمل أن نحقق من 1،2،3،4 الحقل _ID إلى ميزة النمو ن التلقائي.

{
  "_id":1,
  "product_name": "Apple iPhone",
  "category": "mobiles"
}

للقيام بذلك، إنشاء مجموعة من العدادات، يمكن للقيم الحقل تسلسل تلقائي تكون طويلة:

>db.createCollection("counters")

ونحن الآن إدراج الوثائق التالية للعدادات في جمع واستخدام productid كمفتاح:

{
  "_id":"productid",
  "sequence_value": 0
}

الحقل sequence_value هو سلسلة من القيم النمو التلقائي بعد.

استخدام تسلسل الأوامر التالية لإدراج عدادات ثيقة من وثائق جمع:

>db.counters.insert({_id:"productid",sequence_value:0})

خلق وظيفة جافا سكريبت

الآن، ونحن خلق وظيفة getNextSequenceValue كمدخل اسم التسلسل، فإن تسلسل محدد تنمو تلقائيا من قبل (1) وترجع آخر قيمة تسلسل. في المثال في هذه السلسلة مقالة بعنوان productid.

>function getNextSequenceValue(sequenceName){
   var sequenceDocument = db.counters.findAndModify(
      {
         query:{_id: sequenceName },
         update: {$inc:{sequence_value:1}},
         new:true
      });
   return sequenceDocument.sequence_value;
}

استخدام وظيفة جافا سكريبت

التالي سوف نستخدم وظيفة getNextSequenceValue لإنشاء مستند جديد وتعيين وثيقة _ID التلقائي قيمة تسلسل عاد هي:

>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.

من أجل التحقق من فعالية وظيفة، يمكننا استخدام الأمر التالي لقراءة الوثيقة:

>db.products.find()

والأمر أعلاه إرجاع النتائج التالية، وجدنا الحقل _ID هو النمو الذاتي:

{ "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"}

{ "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" }