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})
使用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" }