因为 MongoDB 中没有实现这个功能,所以我们需要通过编程的方式来实现。本节中我们将通过两个集合(counters 和 tutorials)来实现自动递增功能,其中 counters 集合用来记录自动递增的数值,tutorials 集合用来存储具体的数据。
假如有以下文档,我们希望 _id 字段以 1、2、3、...、n 的自动递增整数顺序排列。
{ "_id":1, "tutorials_name": "MongoDB 教程", "url": "http://www.biancheng.net/mongodb/index.html", "author": "编程帮" }
为此,我们需要创建一个 counters 集合,并使用该集合来实现自动递增的功能:
> db.createCollection("counters") { "ok" : 1 }
我们将在 counters 集合中插入以下文档:
> db.counters.insert({_id:"productid",sequence_value:0}) WriteResult({ "nInserted" : 1 })
其中 _id 字段的值为 productid,sequence_value 字段的值默认为零,用来保存自动增长后的一个值。
下面我们创建一个名为 getNextSequenceValue 的函数,它能够以序列名作为参数,并将序列号递增 1,然后返回更新后的序列号。
> function getNextSequenceValue(sequenceName){ ... var sequenceDocument = db.counters.findAndModify( ... { ... query:{_id: sequenceName }, ... update: {$inc:{sequence_value:1}}, ... "new":true ... }); ... return sequenceDocument.sequence_value; ... }
下面我们创建一个新的集合,在向集合中插入数据时使用 getNextSequenceValue() 函数来定义 _id 字段的值,示例代码如下:
> db.tutorials.insert({ ... "_id":getNextSequenceValue("productid"), ... "tutorials_name": "MongoDB 教程", ... "url": "http://www.biancheng.net/mongodb/index.html", ... "author": "编程帮" ... }) WriteResult({ "nInserted" : 1 }) > db.tutorials.insert({ ... "_id":getNextSequenceValue("productid"), ... "tutorials_name": "HTML 教程", ... "url": "http://www.biancheng.net/html/index.html", ... "author": "编程帮" ... }) WriteResult({ "nInserted" : 1 })
数据插入完成后,我们可以使用 find() 方法来查询一下该集合中的数据,以验证我们是否使用 getNextSequenceValue() 函数成功的为集合中的 _id 字段设置自动递增功能:
> db.tutorials.find().pretty() { "_id" : 1, "tutorials_name" : "MongoDB 教程", "url" : "http://www.biancheng.net/mongodb/index.html", "author" : "编程帮" } { "_id" : 2, "tutorials_name" : "HTML 教程", "url" : "http://www.biancheng.net/html/index.html", "author" : "编程帮" }
名称栏目:MongoDB自动增长的实现
当前网址:http://www.shufengxianlan.com/qtweb/news31/344081.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联