2019独角兽企业重金招聘Python工程师标准>>>

参考1 参考2

实现

假设要为CollectionB实现自增长ID, 需要引入另外一个专门计算ID的CollectionA. A中存放一条记录:{'_id':'CollectionB', 'currentIdValue':1}, 其中currentIdValue表示CollectionB的当前最大id值+1,每次往CollectionB里插入数据前,先到CollectionA查询currentIdValue 值并把这个值+1。

实现方式主要是利用MongoDB中findAndModify命令,只要每次往MongoDB里insert对象前生成ID赋值给_id就OK了,因为它的实现满足原子性,所以不存在并发问题。findAndModify本身提供了一个upsert参数,为true的话可以自动insert,但那样就不能自定义初始值了,所以不使用upsert。

另,数据库“_seq”的名字以下划线开头,这样列表的时候会排在前面,容易分辨。

实现步骤如下:

> db.CollectionA.insert({'_id':'CollectionB', 'currentIdValue':0})
WriteResult({ "nInserted" : 1 })
>
> ID=db.CollectionA.findAndModify( {update:{$inc:{"currentIdValue":1}}, query:{"_id":"CollectionB"}, new:true} )
{ "_id" : "CollectionB", "currentIdValue" : 1 }
>
> db.user.save( {_id:ID.currentIdValue, uid:ID.currentIdValue, username:"zhangsan", password:"password123", info:"Test User1"} );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
>
> ID=db.CollectionA.findAndModify( {update:{$inc:{"currentIdValue":1}}, query:{"_id":"CollectionB"}, new:true} )
{ "_id" : "CollectionB", "currentIdValue" : 2 }
>
> db.user.save( {_id:ID.currentIdValue, uid:ID.currentIdValue, username:"lisi", password:"test1234567", info:"Test User2"} );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
>
> db.user.find()
{ "_id" : 1, "uid" : 1, "username" : "zhangsan", "password" : "password123", "info" : "Test User1" }
{ "_id" : 2, "uid" : 2, "username" : "lisi", "password" : "test1234567", "info" : "Test User2" }
>
> db.CollectionA.find()
{ "_id" : "CollectionB", "currentIdValue" : 2 }
>
>
# 执行命令增加值
> db.runCommand({findAndModify:'CollectionA',query:{_id:'CollectionB'}, update:{$inc:{'currentIdValue':1}}, new:true});
{"lastErrorObject" : {"updatedExisting" : true,"n" : 1},"value" : {"_id" : "CollectionB","currentIdValue" : 3},"ok" : 1
}
>
> db.CollectionA.find()
{ "_id" : "CollectionB", "currentIdValue" : 3 }

转载于:https://my.oschina.net/u/588736/blog/873877

MongoDB实现ID自增长相关推荐

  1. 快速解决mongodb出现id重复问题

    近期在使用mongodb的过程中遇到一次表中有_id字段重复的记录(相同_id的有两条),着实吓了一大跳,这篇文章主要给大家介绍了关于mongodb出现id重复问题的简单解决办法,需要的朋友可以参考下 ...

  2. oracle数据库主键自增序列_oracle数据库ID自增长--序列

    什么是序列?在mysql中有一个主键自动增长的id,例如:uid number primary key auto_increment;在oracle中序列就是类似于主键自动增长,两者功能是一样的,只是 ...

  3. HBase模式设计之ID顺序增长(rowkey顺序增长)

     编辑 删除 在设计RowKey的时候,常常有应用的RowKey必须包含ID部分,这样才可以支持查询访问.但ID自增长,会导致写入数据的时候压力集中在某一个或少数几个Region上,这是HBase ...

  4. spring boot 集成 mongodb 通过id查询问题

    spring boot 集成 mongodb 通过id查询问题 java 连接 mongodb 查询时通过id 查询不到数据,但其他字段是可以的,现在请各位大佬看看会是什么原因 通过id为参数查询 具 ...

  5. mysql自增ID跳跃增长

    mysql自增ID跳跃增长 2018.06.12 16:09:36 字数 110 阅读 1253 #1.查看现在mysql自增id的配置 show variables like '%increment ...

  6. MySQL清空表且id自增长从0开始

    用于清空某表的数据 且让自增的id重新从0开始,不可回滚(删除数据快) truncate table 你的表名 表结构还在,删除表的全部或者一部分数据行,可以回滚(逐行删除,删除慢) delete t ...

  7. Oracle使用序列触发器实现主键id自动增长

    记录一下oracle中的字段自增问题 在mysql中我们可以使用auto_increment来实现自动增长功能 而在oracle主键没有自动增长类型,所以一般使用序列产生的值作为某张表的主键,实现主键 ...

  8. MongoDB学习笔记一ID自增长

    概要 MongoDB 的_id字段作为一个主键存在于所有文档的最顶层,_id必须是唯一的,而且总是具有唯一约束的索引.除了唯一约束,你可以在集合中的_id字段上使用任何值, 以下这个指南描述了在_id ...

  9. SpringBoot+mongoDB实现id自增

    这段时间给朋友做了一个微信小程序,顺便练习一下spring boot,虽然项目使用的是JPA+MySQL,但是好奇尝试了一下MongoDB实现自增ID,虽然MongoDB很少有自增ID的需求(在分布式 ...

最新文章

  1. 200万!这所“双一流”也开始高薪抢人了!
  2. Yii-mongo操作
  3. 凡科虚拟服务器怎样做301,虚拟主机301重定向怎么做?网站301重定向方法之一
  4. Delphi 2010 安装及调试
  5. 【初探移动前端开发02】移动设备的页面
  6. war 发布后页面不更新_一文看懂tomcat8如何配置web页面管理
  7. xampp mysqli_query and后的条件不行_Java笔记不用!null作为判空条件
  8. 阿里云redis设置缓存方法
  9. Qt5使用windeployqt后 exe文件还是无法执行 无法定位程序输入点 _ZdaPvj 于动态链接库 libstdc++-6.dll
  10. [git] git fsck --lost-found命令用法
  11. 二分答案——H指数(Leetcode 274)
  12. python可以做科学计算吗_python能做什么科学计算
  13. Java特点是支持引用类型_Java四种引用类型:强、软、弱、虚
  14. 设计模式之六 --- 抽象工厂模式(Abstract Factory)
  15. 使 32 位程序使用大于 2GB 的内存
  16. paip.取当天记录的方法sql跟hql hibernate
  17. 最新版MySQL 8.0.22(Windows 64位)下载安装详细方法
  18. 十字链表画法——蓝墨云班课实践改错
  19. 【路径规划】基于A星算法机器人走迷宫路径规划matlab代码
  20. cad2010怎么隐藏标注尺寸,cad2007怎么隐藏标注尺寸

热门文章

  1. 技术总监到底要不要写代码?
  2. AI工程师面试知识点:TensorFlow 框架
  3. 多巴胺:谷歌开源新型增强学习框架
  4. 干货回顾丨TensorFlow四种Cross Entropy算法的实现和应用
  5. 深度好文丨区块链将彻底改变人工智能
  6. DFA确定性有穷自动机及其化简
  7. 前沿科技 | 中科院科学家在关于运动规划的环路机制研究方面获进展
  8. 世界上最好的光刻机为什么来自荷兰?【物联网智商精选】
  9. 构建城市大脑的未来标准,9个值得探索的规范
  10. Nature:揭示人大脑类器官为何缺乏正常人脑特有的细胞亚型和复杂回路