`
anylin
  • 浏览: 14110 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

mongodb自增长(auto_increment)ID的实现方法

阅读更多

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

 

分享到:
评论

相关推荐

    MongoDB的_id自动增长.pdf

    在MongoDB中实现自动增长的`_id`,我们需要通过一些编程方式来模拟这一过程。一种常见的方法是使用一个名为`counters`的集合,其中存储了特定序列(例如`productid`)的当前值,并通过JavaScript函数来管理这个序列...

    mysql从入门到应用详细学习教程

    - **Auto_InCrement**:自动增长字段,常用于主键自增。 - **NULL 和 NOT NULL**:控制是否允许字段为空。 - **DEFAULT**:设置字段的默认值。 **3.4 创建数据库表** 示例代码如下: ```sql CREATE TABLE IF NOT ...

    mysql基础介绍

    2. auto_increment:自增长。 3. unique:唯一约束。 4. not null:非空设置。 创建表时定义约束: ```sql create table student( id int primary key auto_increment, name varchar(20) unique not null, sex...

    数据库创建

    id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL ); ``` 这个例子中,`users`表有三个字段:自动增长的主键`id`,不为空且唯一的`username`,以及不...

    【千锋】一天学会MySQL数据库 学习手记.pdf

    此外,还涉及到自动增长列的概念(AUTO_INCREMENT),这种机制能自动为插入的行提供唯一标识值。DML还支持各类约束,例如主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、非空约束(NOT NULL)、默认值约束(DEFAULT...

    MySQL入门很简单-学习笔记_20110913.pdf

    - **设置属性值自动增加**:`AUTO_INCREMENT;` - **设置属性的默认值**:`DEFAULT value;` 2. **查看表结构** - **DESCRIBE**:`DESCRIBE table_name;` - **SHOW CREATE TABLE**:`SHOW CREATE TABLE table_...

    Mysql的核心要点

    - **自动增长**(`AUTO_INCREMENT`): 自动为新记录分配唯一的ID值。 - **注释**: 可以为表、列等添加注释信息,便于理解。 以上内容概述了MySQL的核心要点,包括基本概念、操作、优化策略、部署方案、数据类型等方面...

    【国开搜题】国家开放大学 一网一平台 24春数据库应用试卷包02 期末考试押题试卷.docx

    AUTO_INCREMENT:自动增长的主键。 **2. SELECT 语句的基本结构** - **知识点概述:** - SELECT 语句用于从数据库中检索数据。 - **选项解析:** - A. WHERE:指定过滤条件。 - B. INSERT:不属于 SELECT ...

    数据库练习题.docx

    - **AUTO_INCREMENT**: 自动增长字段。 - **UNIQUE**: 字段值必须唯一。 - **DEFAULT**: 设置字段的默认值。 - **PRIMARY KEY**: 主键,用于唯一标识一条记录。 - **FOREIGN KEY**: 外键,用于与其他表建立联系。 - ...

    数据库(1).docx

    - **AUTO_INCREMENT**:自动增长列。 - **UNIQUE**:指定某列或某几列的组合必须唯一。 - **DEFAULT**:设置某列的默认值。 - **PRIMARY KEY**:主键约束,标识表中的每一行记录。 - **FOREIGN KEY**:外键约束,...

    Mysql语法教程

    - **自动增长**:`AUTO_INCREMENT` - **外键约束**:关联两个表的字段,`FOREIGN KEY` - **级联操作**:`ON DELETE CASCADE` 或 `ON UPDATE CASCADE` ### 五、多表操作 - **联接查询**:内连接(隐式和显式),外...

Global site tag (gtag.js) - Google Analytics