MongoDB berkembang secara automatik
MongoDB tidak mempunyai fungsi pertumbuhan automatik seperti SQL. _id MongoDB ialah pengecam unik 12-bait yang dijana secara automatik oleh sistem.
Tetapi dalam beberapa kes, kita mungkin perlu melaksanakan fungsi pertumbuhan automatik ObjectId.
Memandangkan MongoDB tidak melaksanakan fungsi ini, kami boleh melaksanakannya secara pengaturcaraan Laksanakan pertumbuhan automatik medan _id dalam koleksi kaunter.
Menggunakan koleksi kaunter
Pertimbangkan dokumen produk berikut. Kami mahu medan _id dilaksanakan Fungsi auto-kenaikan daripada 1,2,3,4 kepada n.
{ "_id":1, "product_name": "Apple iPhone", "category": "mobiles" }
Untuk melakukan ini, buat koleksi pembilang, dan nilai medan jujukan boleh menjadi panjang secara automatik:
>db.createCollection("counters")
Sekarang kami memasukkan dokumen berikut ke dalam koleksi kaunter, menggunakan productid sebagai kunci:
{ "_id":"productid", "sequence_value": 0 }
Medan nilai_jujukan ialah nilai jujukan selepas pertumbuhan automatik.
Masukkan ke dalam dokumen jujukan koleksi pembilang menggunakan arahan berikut:
>db.counters.insert({_id:"productid",sequence_value:0})
Buat fungsi Javascript
Sekarang, kami mencipta fungsi getNextSequenceValue sebagai input untuk nama urutan, Urutan yang ditentukan ditambah secara automatik sebanyak 1 dan nilai jujukan terkini dikembalikan. Dalam contoh artikel ini jujukan dinamakan productid .
>function getNextSequenceValue(sequenceName){ var sequenceDocument = db.counters.findAndModify( { query:{_id: sequenceName }, update: {$inc:{sequence_value:1}}, new:true }); return sequenceDocument.sequence_value; }
Menggunakan fungsi Javascript
Seterusnya kita akan menggunakan fungsi getNextSequenceValue untuk mencipta dokumen baharu, Dan tetapkan dokumen _id secara automatik kepada nilai jujukan yang dikembalikan:
>db.products.insert({ "_id":getNextSequenceValue("productid"), "product_name":"Apple iPhone", "category":"mobiles"}) >db.products.insert({ "_id":getNextSequenceValue("productid"), "product_name":"Samsung S3", "category":"mobiles"})
Seperti yang anda lihat, kami menggunakan fungsi getNextSequenceValue untuk menetapkan medan _id.
Untuk mengesahkan sama ada fungsi itu sah, kita boleh menggunakan arahan berikut untuk membaca dokumen:
>db.products.find()
Arahan di atas akan mengembalikan hasil berikut, dan kami mendapati bahawa medan _id meningkat secara automatik:
{ "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"} { "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" }