`
wbj0110
  • 浏览: 1612510 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Mongodb 自增ID实现及原理分析

阅读更多

研究发现,mongodb完全可以实现自增ID,并且Morphia已经对此做了封装,并且使用起来也非常方便,只需让你的entity继承自LongIdEntity。

下面给出一段entity示例代码如下:

 

@EntitypublicclassUserextendsLongIdEntity{publicstaticfinalString DBNAME ="myds";publicUser(){super(MongoManager.getDatastore(DBNAME));}privateString username;privateString password;privateint age;//---get set---}

DAO类及测试代码如下:

 

 

publicclassUserDAOextendsBasicDAO<user, long="">{publicUserDAO(){super(User.class,MongoManager.getMongo(),MongoManager.getMorphia(),User.DBNAME);}publicstaticvoid main(String[] args){User user =newUser();
    user.setPassword("123456");
    user.setUsername("lamfire");
    user.setAge(100);UserDAO dao =newUserDAO();Keykey= dao.save(user);System.out.println(user.getUsername()+" ID:"+ key.getId());

    user =newUser();
    user.setPassword("abc123");
    user.setUsername("hayash");
    user.setAge(99);

    key = dao.save(user);System.out.println(user.getUsername()+"ID:"+ key.getId());}}

运行结果输出为:

 

lamfire ID:1
hayash ID:2

实验证明,这个自增ID已经生效。并且在“myds”库下新增了表"ids",并且表里有一行记录存储了User表对应的自增ID的值,每调用一次该值就被自动加一。

下面,我们再来看看LongIdEntity干了什么事,如何实现的自增呢?里面的核心代码片段如下(关键位置我添加了注释):

String collName = ds.getCollection(getClass()).getName();Queryq= ds.find(StoredId.class,"_id", collName);//跟据表名查询UpdateOperationsuOps= ds.createUpdateOperations(StoredId.class);
uOps.inc("value");//指定了将"value"递增操作StoredId newId = ds.findAndModify(q, uOps);//执行查询并更新,该操作椐有原子性if(newId ==null){
   newId =newStoredId(collName);
   ds.save(newId);}
myLongId = newId.getValue();
分享到:
评论

相关推荐

    Mongodb自增id实现方法

    本文将详细介绍如何在 MongoDB 中实现自增ID。 首先,我们需要创建一个专门用来存储自增ID的集合,例如 `ids`。在这个集合中,我们保存一个文档,该文档包含一个名称(如 `user`)和一个初始ID(如0)。下面是在 ...

    12、MongoDB复制集实战及其原理分析-ev.rar

    12、MongoDB复制集实战及其原理分析_ev.rar12、MongoDB复制集实战及其原理分析_ev.rar12、MongoDB复制集实战及其原理分析_ev.rar12、MongoDB复制集实战及其原理分析_ev.rar12、MongoDB复制集实战及其原理分析_ev.rar...

    spring-data集成mongodb大数据量分页+自增id实现+MongodbPlugin集成

    skip随着数据量上去,分页性能极具下降,不推荐。这里使用spring-data-mongo实现的分页,并且实现了mongodb自增id(监听器方式)、也集成了轻量级插件MongodbPlugin,有需要的可以下载看看哦~

    Python+MongoDB自增键值的简单实现

    然而,这并不意味着无法在MongoDB中实现自增功能。本文将详细介绍一种使用Python和MongoDB实现自增键值的简单方法。 首先,我们需要理解问题的背景。在开发一个测试工具箱时,作者遇到了要在MongoDB中创建一个bug...

    php实现Mongodb自定义方式生成自增ID的方法

    在PHP中实现MongoDB自定义方式生成自增ID的方法,主要涉及到MongoDB的数据库操作以及自定义函数的编写。MongoDB是一种文档型数据库,它不支持传统的SQL中的自增序列,但可以通过特定的方式模拟实现这一功能。以下是...

    MongoDB疑难杂症分析及优化

    MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化...

    详解如何使用MongoDB+Springboot实现分布式ID的方法

    在实现分布式ID时,通常有几种方案:使用数据库自增ID、使用Redis的incr命令、使用UUID、Twitter的snowflake算法、利用Zookeeper生成唯一ID、MongoDB的ObjectId等。每种方案都有其优缺,需要根据实际情况选择合适的...

    django+mongodb+hui 实现的后台管理系统.zip

    django+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理...

    Flink CDC MongoDB Connector 的实现原理和使用实践.pdf

    MongoDB CDC Connector 实现原理和使用实践 Flink CDC MongoDB Connector 是一种实时数据同步解决方案,旨在解决 MongoDB 数据变更捕获和实时数据同步问题。本文将详细介绍 MongoDB CDC Connector 的实现原理和使用...

    [MongoDB] Node.js 应用程序开发 (MongoDB 及 Backbone 实现) (英文版)

    [奥莱理] Node.js 应用程序开发 (MongoDB 及 Backbone 实现) (英文版) [奥莱理] Building Node Applications with MongoDB and Backbone (E-Book) ☆ 出版信息:☆ [作者信息] Mike Wilson [出版机构] 奥莱理 ...

    Mongodb存储特性与内部原理

    接下来,我将详细分析 MongoDB 的存储特性与内部原理。 首先,MongoDB 的存储布局是基于文件系统的。它使用了预分配文件的策略来避免文件系统的碎片化问题,这样能够提高性能。在数据库的目录布局中,每个数据库会...

    Thinkphp使用mongodb数据库实现多条件查询方法

    在Thinkphp中实现多条件查询时,可以使用框架提供的查询构建器(Query Builder),但是当涉及到MongoDB的复合查询时,比如需要使用AND和OR逻辑运算符进行多条件筛选,官方文档中提供的方法可能不足以满足需求。...

    react+mongodb+node实现大众点评

    react+mongodb+node实现大众点评,前端用现在流行的react框架搭建,后端用node实现接口,数据库采用非关系型数据库mongodb。

    mongodb 的 小例子(curd)

    群里学习lucene的成员挺多的,一直没时间给大家做个demo、最近抽时间用lucene给大家写了个demo 可以配置采集网站的图片,包含分组统计,相同数据合并功能,主要是给群内成员来个demo 小试牛刀、临时写的,莫吐槽 ...

    MongoDB4.2分片及副本集群搭建

    MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群

    使用scrapy,redis, mongodb,graphite实现一个广泛的网络爬虫,底层存储mongodb资源,全面使用redis实现,爬虫状态显示使用graphite实现.zip

    使用scrapy,redis, mongodb,graphite实现一个广泛的网络爬虫,底层存储mongodb资源,全面使用redis实现,爬虫状态显示使用graphite实现分发爬虫使用scrapy,redis, mongodb,graphite实现一个广泛的网络爬虫,底层存储...

Global site tag (gtag.js) - Google Analytics