MongoDB中沒有類似SQL資料庫中那麼拿來即用的自動增量功能。 預設情況下,它使用_id
欄位的12
位元組ObjectId作為唯一標識文件的主鍵。 但是,可能存在我們可能希望_id
欄位擁有除ObjectId之外的一些自動遞增值的情況。
由於MongoDB不提供預設自動增長功能,所以我們通過使用MongoDB文件中所建議的計數器集合以程式設計的方式來實現此功能。
考慮以下product
文件。 我們希望_id
欄位是從:1
,2
,3
,4
到n
開始的自動遞增整數序列。
{
"_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})
現在將在建立一個新文件時使用函式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" }