研究发现,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。 首先,我们需要创建一个专门用来存储自增ID的集合,例如 `ids`。在这个集合中,我们保存一个文档,该文档包含一个名称(如 `user`)和一个初始ID(如0)。下面是在 ...
12、MongoDB复制集实战及其原理分析_ev.rar12、MongoDB复制集实战及其原理分析_ev.rar12、MongoDB复制集实战及其原理分析_ev.rar12、MongoDB复制集实战及其原理分析_ev.rar12、MongoDB复制集实战及其原理分析_ev.rar...
skip随着数据量上去,分页性能极具下降,不推荐。这里使用spring-data-mongo实现的分页,并且实现了mongodb自增id(监听器方式)、也集成了轻量级插件MongodbPlugin,有需要的可以下载看看哦~
然而,这并不意味着无法在MongoDB中实现自增功能。本文将详细介绍一种使用Python和MongoDB实现自增键值的简单方法。 首先,我们需要理解问题的背景。在开发一个测试工具箱时,作者遇到了要在MongoDB中创建一个bug...
在PHP中实现MongoDB自定义方式生成自增ID的方法,主要涉及到MongoDB的数据库操作以及自定义函数的编写。MongoDB是一种文档型数据库,它不支持传统的SQL中的自增序列,但可以通过特定的方式模拟实现这一功能。以下是...
MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化...
在实现分布式ID时,通常有几种方案:使用数据库自增ID、使用Redis的incr命令、使用UUID、Twitter的snowflake算法、利用Zookeeper生成唯一ID、MongoDB的ObjectId等。每种方案都有其优缺,需要根据实际情况选择合适的...
django+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理...
MongoDB CDC Connector 实现原理和使用实践 Flink CDC MongoDB Connector 是一种实时数据同步解决方案,旨在解决 MongoDB 数据变更捕获和实时数据同步问题。本文将详细介绍 MongoDB CDC Connector 的实现原理和使用...
[奥莱理] Node.js 应用程序开发 (MongoDB 及 Backbone 实现) (英文版) [奥莱理] Building Node Applications with MongoDB and Backbone (E-Book) ☆ 出版信息:☆ [作者信息] Mike Wilson [出版机构] 奥莱理 ...
接下来,我将详细分析 MongoDB 的存储特性与内部原理。 首先,MongoDB 的存储布局是基于文件系统的。它使用了预分配文件的策略来避免文件系统的碎片化问题,这样能够提高性能。在数据库的目录布局中,每个数据库会...
在Thinkphp中实现多条件查询时,可以使用框架提供的查询构建器(Query Builder),但是当涉及到MongoDB的复合查询时,比如需要使用AND和OR逻辑运算符进行多条件筛选,官方文档中提供的方法可能不足以满足需求。...
react+mongodb+node实现大众点评,前端用现在流行的react框架搭建,后端用node实现接口,数据库采用非关系型数据库mongodb。
群里学习lucene的成员挺多的,一直没时间给大家做个demo、最近抽时间用lucene给大家写了个demo 可以配置采集网站的图片,包含分组统计,相同数据合并功能,主要是给群内成员来个demo 小试牛刀、临时写的,莫吐槽 ...
MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群
使用scrapy,redis, mongodb,graphite实现一个广泛的网络爬虫,底层存储mongodb资源,全面使用redis实现,爬虫状态显示使用graphite实现分发爬虫使用scrapy,redis, mongodb,graphite实现一个广泛的网络爬虫,底层存储...