MongoDB 自动增长

MongoDB 没有像 SQL 一样有自动增长的功能,

MongoDB 的 _id 是系统自动生成的12字节唯一标识。

但在某些情况下,我们可能需要实现 ObjectId 自动增长功能。

由于 MongoDB 没有实现这个功能,我们可以通过编程的方式来实现,以下我们将在

counters 集合中实现_id字段自动增长。

使用 counters 集合

考虑以下 products 文档。我们希望 _id 字段实现

从 1,2,3,4 到 n 的自动增长功能。

{

"_id":1,

"product_name": "Apple iPhone",

"category": "mobiles"

}

为此,创建 counters 集合,序列字段值可以实现自动长:

>db.createCollection("counters")

现在我们向 counters 集合中插入以下文档,使用 productid 作为 key:

{

"_id":"productid",

"sequence_value": 0

}

sequence_value 字段是序列通过自动增长后的一个值。

使用以下命令插入 counters 集合的序列文档中:

>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 字段。

为了验证函数是否有效,我们可以使用以下命令读取文档:

>db.products.find()

以上命令将返回以下结果,我们发现 _id 字段是自增长的:

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

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

mongodb和mysql中自动增长id_MongoDB 自动增长相关推荐

  1. mysql 获取递增id_如何在MySQL中获取下一个自动递增ID?

    MySQL具有AUTO_INCREMENT关键字来执行自动增量.AUTO_INCREMENT的起始值为1,这是默认值.每条新记录将增加1. 要获得MySQL中的下一个自动增量ID,我们可以使用MySQ ...

  2. mongodb在mysql中怎么用,mongoDB数据库基本操作

    mongoDB中聚集集合(collection/coll)相当于mysql中的表 文档相当于mysql中的每一行数据 常用命令 1.获得帮助命令db.help() db.表名.help() db.表名 ...

  3. mongodb和mysql中自动增长id_如何在java中维护MongoDB的_id字段的自动增长

    _id字段是MongoDB中一个特殊的字段,它的类型为BSON ObjectId.它是每条记录的第一个属性,并且该属性值必须唯一. BSON ObjectId长12个字节,包含4字节的时间戳.3字节的 ...

  4. studio3T import a SQL Database to Mongodb(从mysql中导入数据到mongodb)

    具体参考studio3T官方文档:Import a SQL Database to MongoDB in 5 Steps | Studio 3T 1.打开SQL Migration-->选择SQ ...

  5. mysql临时密码不能用,自动生成临时密码后无法访问MySQL

    自动生成临时密码后无法访问MySQL 我已经删除并安装了OSX 10.11 El Capitan并且我一直在通过本教程学习如何在新的OS X上运行MySQL .第一步是下载MySQL For Mac ...

  6. mysql中datetime如何用实体类封装_死磕了关于MyBatis10种超好用的写法

    用来循环容器的标签forEach,查看例子 foreach元素的属性主要有item,index,collection,open,separator,close. item:集合中元素迭代时的别名 in ...

  7. MySQL中的自动增长

    hello,大家好,我是你们的怪味老王,今天我们简单的说说自动增长 自动增长的作用: 问题:为数据表设置主键约束后,每次插入记录时,如果插入的值已经存在,会插入失败. 如何解决:为主键生成自动增长的值 ...

  8. sqlserver新增主键自增_深入Mysql,SqlServer,Oracle主键自动增长的设置详解

    1.把主键定义为自动增长标识符类型MySql在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: create table customers(id i ...

  9. 深入Mysql,SqlServer,Oracle主键自动增长的设置详解

    1.把主键定义为自动增长标识符类型 MySql 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: 复制代码 代码如下: create table c ...

最新文章

  1. 为什么 OLAP 需要列式存储
  2. 20172310 2017-2018-2 《程序设计与数据结构》第四周学习总结
  3. 梯度下降法(一)入门
  4. C语言实验——求一个3*3矩阵对角线元素之和
  5. tomcat启动时一闪而过的几种原因
  6. 【springboot】mybatis-generator+tkmybatis通用mapper+swagge+redis缓存整合使用
  7. No services have been found解决方案
  8. PHP iconv 解决utf-8和gb2312编码转换问题
  9. 批量获取ip运营商_通信公司员工收钱开通IP多拨被用于诈骗,6人获刑
  10. 如何利用工业大数据降本增效
  11. [恢]hdu 2003
  12. pp模块常用表 sap_SAP财务常用的PP模块事务代码清单
  13. 利用python编写个性二维码制作工具(支持微信名片二维码),并打包成EXE可执行文件。——001
  14. 华硕计算机在哪里看显卡cpussD,显卡怎么看型号(怎么看华硕显卡的性能档次)...
  15. C# 之 ZipOutPutStream 压缩文件
  16. iOS对sqlite3进行封装
  17. 文化馆建筑方案设计原理及方案
  18. 打开Windows自带的画图工具
  19. 优购小程序项目效果预览
  20. LeetCode 27 移除元素 题解

热门文章

  1. 基于JAVA+Servlet+JSP+MYSQL的学生选课系统
  2. 基于JAVA+SpringBoot+Mybatis+MYSQL的旅游信息管理系统
  3. JAVA基础系列:内部类获取外部类的成员变量
  4. 阅读笔记11-孤独后厂村:30万互联网人跳不出的中国硅谷
  5. web前端学习笔记(二)---Django
  6. JAVA虚拟机垃圾回收算法原理
  7. JavaScript与JSP区别
  8. 在ASP.NET中使用FCKeditor V2
  9. php入职头一星期,入职一周就想离职,真的是我太飘了吗?
  10. zuul转发服务一直报404_SpringCloud之Zuul的多个使用场景