English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
MongoDB لا يحتوي على وظيفة تلقائية لزيادة المفتاح كما في قواعد البيانات SQL. بشكل افتراضي، سيكون_id
حقلObjectId من 12 بيت كود الميدان يستخدم كمفتاح رئيسي لتحديد الوثيقة بشكل فريد. ولكن، في بعض الحالات، قد نرغب في أن يكون حقل_id يحتوي على قيمة تلقائية تتدرج بخلاف ObjectId.
بما أن هذا ليس ميزة افتراضية في MongoDB،سنقوم بتحقيق ذلك من خلالcounters
يقدم MongoDB مجموعة مقترحة للوصول إلى هذه الميزة برمجة.
انظر أدناهproducts
وثيقة.نريد أن يكون حقل _id سلسلة ذات أرقام متدرجة تتدرج من 1،2،3،4 إلى n.
{ "_id":1, "product_name": "Apple iPhone" "category": "mobiles" }
للقيام بذلك،أنشئcounters
مجموعة،وسيتبع هذه المجموعة آخر قيمة لكل حقل تسلسلي.
>db.createCollection("counters")
الآن، سنقوم بإنشاء وثيقةproductid
إدراج كлючه في مجموعة counters-
> db.counters.insert({ "_id":"productid", "sequence_value": 0 }) WriteResult({ "nInserted" : 1 }) >
حقل sequence_value يتبع آخر قيمة في التسلسل.
استخدام الكود التالي لإدراج هذا الوثيقة التسلسلية في مجموعة counters-
>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.
لإثبات الوظيفة، دعنا نستخدم أمر find للحصول على المستندات
>db.products.find()
استعلام أعلاه عاد بالوثائق التالية التي تحتوي على حقل _id التلقائي
{ "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"} { "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" }