MongoDB中沒有類似SQL數(shù)據(jù)庫中那么拿來即用的自動增量功能。 默認情況下,它使用_id字段的12字節(jié)ObjectId作為唯一標識文檔的主鍵。 但是,可能存在我們可能希望_id字段擁有除ObjectId之外的一些自動遞增值的情況。
由于MongoDB不提供默認自動增長功能,所以我們通過使用MongoDB文檔中所建議的計數(shù)器集合以編程的方式來實現(xiàn)此功能。
考慮以下product文檔。 我們希望_id字段是從:1,2,3,4到n開始的自動遞增整數(shù)序列。
{
"_id":1,
"product_name": "Huawei P9",
"category": "mobiles"
}
為此,創(chuàng)建一個計數(shù)器集合,它將跟蹤所有序列字段的最后一個序列值。
>db.createCollection("counters")
現(xiàn)在,將把以下文檔插入計數(shù)器集合中,以productid作為鍵 -
{
"_id":"productid",
"sequence_value": 0
}
字段sequence_value跟蹤序列的最后一個值。使用以下代碼將此序列文檔插入計數(shù)器集合中 -
>db.counters.insert({_id:"productid",sequence_value:0})
現(xiàn)在將在創(chuàng)建一個新文檔時使用函數(shù)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函數(shù)來設(shè)置_id字段的值。
>db.products.find()
上述查詢返回了具有自動遞增的_id字段的值,如下文檔所示 -
{ "_id" : 1, "product_name" : "HuaWei P9", "category" : "mobiles"}
{ "_id" : 2, "product_name" : "OPPO X6s", "category" : "mobiles" }