设为首页 加入收藏

TOP

mongodb自增长(auto_increment)ID的实现方法
2014-11-24 07:25:10 来源: 作者: 【 】 浏览:3
Tags:mongodb 增长 auto_increment 实现 方法
1. 为什么要手动实现自增长ID

mongodb的Collection在插入数据时,如果没有指定'_id'字段,系统会自动产生一个'_id', 产生的规则类似UUID。由于这个ID的长度比较长,如果在一个Collection中存储大量数据时,会带来比较大的空间浪费。所以就由了自定义'_id'的需求,比如定义'_id'的类型为int。那么如何实现这个自定义id类似 mysql的auto_increment特性呢,mongodb没有提供这样的功能,需要我们手动去实现。



2. 实现原理



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



从上面的原理可以看出,我们需要一个查询并加1的原子操作,恰好mongodb提供了这样的接口,而且是线程安全的,即是findAndModify。



3. 代码示例

mongodb的脚本如下:

db.runCommand(findAndModify:'CollectionA',query:{_id:'CollectionB'}, update:{

$inc:{'currentIdValue':1}}, new:true};

具体使用时,可以转换成对应语言的代码。

参考API:

http://www.mongodb.org/display/DOCS/findAndModify+Command
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇mysql编译报错 下一篇主外键一对多,多对多的理解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Java 集合框架 - 菜 (2025-12-27 02:19:36)
·Java集合框架最全详 (2025-12-27 02:19:33)
·为什么安卓开发要用J (2025-12-27 02:19:30)
·C/C++ 类模板与模板 (2025-12-27 01:49:52)
·C语言 模板化<templ (2025-12-27 01:49:49)