您当前的位置:首页 > 计算机 > 软件应用 > 数据库 > MongoDB

MongoDB自动增长的实现

时间:10-07来源:作者:点击数:

MongoDB 中没有像 SQL 中那样可以赋予某个字段自动递增的功能,默认情况下 MongoDB 的 _id 字段是系统自动生成的 12 字节的唯一标识,但是在某些情况下我们可能需要在 MongoDB 的某个字段上实现类似 SQL 中的自动递增功能。

因为 MongoDB 中没有实现这个功能,所以我们需要通过编程的方式来实现。本节中我们将通过两个集合(counters 和 tutorials)来实现自动递增功能,其中 counters 集合用来记录自动递增的数值,tutorials 集合用来存储具体的数据。

使用 counters 集合

假如有以下文档,我们希望 _id 字段以 1、2、3、...、n 的自动递增整数顺序排列。

{
    "_id":1,
    "tutorials_name": "MongoDB 教程",
    "url": "https://www.cdsy.xyz/computer/soft/database/mongodb/",
    "author": "城东书院"
}

为此,我们需要创建一个 counters 集合,并使用该集合来实现自动递增的功能:

> db.createCollection("counters")
{ "ok" : 1 }

我们将在 counters 集合中插入以下文档:

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

其中 _id 字段的值为 productid,sequence_value 字段的值默认为零,用来保存自动增长后的一个值。

创建 Javascript 函数

下面我们创建一个名为 getNextSequenceValue 的函数,它能够以序列名作为参数,并将序列号递增 1,然后返回更新后的序列号。

> 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.tutorials.insert({
... "_id":getNextSequenceValue("productid"),
... "tutorials_name": "MongoDB 教程",
... "url": "https://www.cdsy.xyz/computer/soft/database/mongodb/",
... "author": "城东书院"
... })
WriteResult({ "nInserted" : 1 })
> db.tutorials.insert({
... "_id":getNextSequenceValue("productid"),               
... "tutorials_name": "HTML 教程",
... "url": "https://www.cdsy.xyz/computer/programme/html_div_css/",
... "author": "城东书院"
... })
WriteResult({ "nInserted" : 1 })

数据插入完成后,我们可以使用 find() 方法来查询一下该集合中的数据,以验证我们是否使用 getNextSequenceValue() 函数成功的为集合中的 _id 字段设置自动递增功能:

> db.tutorials.find().pretty()
{
        "_id" : 1,
        "tutorials_name" : "MongoDB 教程",
        "url" : "https://www.cdsy.xyz/computer/soft/database/mongodb/",
        "author" : "城东书院"
}
{
        "_id" : 2,
        "tutorials_name" : "HTML 教程",
        "url" : "https://www.cdsy.xyz/computer/programme/html_div_css/",
        "author" : "城东书院"
}
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门