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" }