首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

Mongodb 从增ID实现及原理分析

2013-10-28 
Mongodb 自增ID实现及原理分析研究发现,mongodb完全可以实现自增ID,并且Morphia已经对此做了封装,并且使用

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:1hayash 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();

热点排行