MongoDB 自增序列

MongoDB 自增序列

MongoDB没有像SQL数据库那样支持开箱即用的自增功能。默认情况下,MongoDB使用12字节的ObjectId作为主键来唯一标识文档中的 _id 字段。然而,有些场景下我们可能希望_id字段具有一些自增的值,而不是使用ObjectId。

鉴于这在MongoDB中不是默认功能,我们可以根据MongoDB文档的建议,通过使用一个 counters 集合来编程实现这个功能。

使用计数器集合

考虑以下 products 文档。我们希望_id字段是一个 自增整数序列 ,从1、2、3、4一直到n。

{
  "_id":1,
  "product_name": "Apple iPhone",
  "category": "mobiles"
}

为此,创建一个 counters 集合,用于跟踪所有序列字段的最后一个序列值。

>db.createCollection("counters")

现在,我们将使用以下文档将其插入到计数器集合中,其键为 productid -

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

字段 sequence_value 用于跟踪序列的最后一个值。

使用以下代码将该序列文档插入计数器集合中 −

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

创建Javascript函数

现在,我们将创建一个函数 getNextSequenceValue ,该函数将以序列名称作为输入,将序列号增加1,并返回更新后的序列号。在我们的例子中,序列名称是 productid

>function getNextSequenceValue(sequenceName){
   var sequenceDocument = db.counters.findAndModify({
      query:{_id: sequenceName },
      update: {$inc:{sequence_value:1}},
      new:true
   });
   return sequenceDocument.sequence_value;
}

使用Javascript函数

现在我们将在创建新文档时使用函数getNextSequenceValue,并将返回的序列值分配为文档的_id字段。

使用以下代码插入两个示例文档−

>db.products.insert({
   "_id":getNextSequenceValue("productid"),
   "product_name":"Apple iPhone",
   "category":"mobiles"
})
>db.products.insert({
   "_id":getNextSequenceValue("productid"),
   "product_name":"Samsung S3",
   "category":"mobiles"
})

如您所见,我们使用getNextSequenceValue函数为_id字段设置了值。

为了验证功能,让我们使用find命令检索文档-

>db.products.find()

上面的查询返回了具有自动递增_id字段的以下文档 –

{ "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"}
{ "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" }

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程