Latest web development tutorials

MongoDB secara otomatis meningkatkan

MongoDB tidak ada sama kemampuan SQL untuk tumbuh secara otomatis, _id MongoDB adalah 12 byte yang unik mengidentifikasi sistem secara otomatis.

Namun, dalam beberapa kasus, kita mungkin perlu untuk mengimplementasikan ObjectId fitur otomatis pertumbuhan.

Karena MongoDB tidak menerapkan fitur ini, kita dapat diprogram untuk mencapai, kita akan mencapai bidang _id berikut tumbuh secara otomatis counter koleksi.


koleksi penggunaan counter

Pertimbangkan dokumentasi produk berikut. Kami berharap untuk mencapai dari 1,2,3,4 _id lapangan untuk fitur pertumbuhan n otomatis.

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

Untuk melakukan ini, membuat satu set counter, nilai bidang urut otomatis bisa panjang:

>db.createCollection("counters")

Sekarang kita memasukkan dokumen berikut ini ke counter dalam koleksi, penggunaan productid sebagai kunci:

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

bidang sequence_value adalah urutan nilai dengan pertumbuhan otomatis setelah.

Gunakan urutan perintah berikut untuk memasukkan counter dokumen dari koleksi:

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

Membuat fungsi Javascript

Sekarang, kita membuat fungsi getNextSequenceValue sebagai masukan nama urutan, urutan ditentukan secara otomatis akan tumbuh sebesar 1 dan mengembalikan nilai urutan terbaru. Pada contoh di seri artikel ini disebut productid.

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

Gunakan fungsi Javascript

Selanjutnya kita akan menggunakan fungsi getNextSequenceValue untuk membuat dokumen baru dan mengatur dokumen _id nilai urutan otomatis dikembalikan adalah:

>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, kita menggunakan fungsi getNextSequenceValue untuk mengatur bidang _id.

Untuk memverifikasi efektivitas fungsi, kita dapat menggunakan perintah berikut untuk membaca dokumen:

>db.products.find()

Perintah di atas akan mengembalikan hasil sebagai berikut, kami menemukan lapangan _id adalah pertumbuhan diri:

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

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