MongoDB自動遞增序列


MongoDB中沒有類似SQL資料庫中那麼拿來即用的自動增量功能。 預設情況下,它使用_id欄位的12位元組ObjectId作為唯一標識文件的主鍵。 但是,可能存在我們可能希望_id欄位擁有除ObjectId之外的一些自動遞增值的情況。

由於MongoDB不提供預設自動增長功能,所以我們通過使用MongoDB文件中所建議的計數器集合以程式設計的方式來實現此功能。

使用計數器集合

考慮以下product文件。 我們希望_id欄位是從:1,2,3,4n開始的自動遞增整數序列。

{
  "_id":1,
  "product_name": "Huawei P9",
  "category": "mobiles"
}

為此,建立一個計數器集合,它將跟蹤所有序列欄位的最後一個序列值。

>db.createCollection("counters")

現在,將把以下文件插入計數器集合中,以productid作為鍵 -

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

欄位sequence_value跟蹤序列的最後一個值。使用以下程式碼將此序列文件插入計數器集合中 -

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

使用Javascript函式

現在將在建立一個新文件時使用函式getNextSequenceValue,並將返回的序列值分配為文件的_id欄位的值。

使用以下程式碼插入兩個範例文件 -

>db.products.insert({
   "_id":getNextSequenceValue("productid"),
   "product_name":"HuaWei P9",
   "category":"mobiles"
})

>db.products.insert({
   "_id":getNextSequenceValue("productid"),
   "product_name":"OPPO X6s",
   "category":"mobiles"
})

如上所示,使用getNextSequenceValue函式來設定_id欄位的值。

>db.products.find()

上述查詢返回了具有自動遞增的_id欄位的值,如下文件所示 -

{ "_id" : 1, "product_name" : "HuaWei P9", "category" : "mobiles"}
{ "_id" : 2, "product_name" : "OPPO X6s", "category" : "mobiles" }