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`,我们需要通过一些编程方式来模拟这一过程。一种常见的方法是使用一个名为`counters`的集合,其中存储了特定序列(例如`productid`)的当前值,并通过JavaScript函数来管理这个序列...
- **Auto_InCrement**:自动增长字段,常用于主键自增。 - **NULL 和 NOT NULL**:控制是否允许字段为空。 - **DEFAULT**:设置字段的默认值。 **3.4 创建数据库表** 示例代码如下: ```sql CREATE TABLE IF NOT ...
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`,以及不...
此外,还涉及到自动增长列的概念(AUTO_INCREMENT),这种机制能自动为插入的行提供唯一标识值。DML还支持各类约束,例如主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、非空约束(NOT NULL)、默认值约束(DEFAULT...
- **设置属性值自动增加**:`AUTO_INCREMENT;` - **设置属性的默认值**:`DEFAULT value;` 2. **查看表结构** - **DESCRIBE**:`DESCRIBE table_name;` - **SHOW CREATE TABLE**:`SHOW CREATE TABLE table_...
- **自动增长**(`AUTO_INCREMENT`): 自动为新记录分配唯一的ID值。 - **注释**: 可以为表、列等添加注释信息,便于理解。 以上内容概述了MySQL的核心要点,包括基本概念、操作、优化策略、部署方案、数据类型等方面...
AUTO_INCREMENT:自动增长的主键。 **2. SELECT 语句的基本结构** - **知识点概述:** - SELECT 语句用于从数据库中检索数据。 - **选项解析:** - A. WHERE:指定过滤条件。 - B. INSERT:不属于 SELECT ...
- **AUTO_INCREMENT**: 自动增长字段。 - **UNIQUE**: 字段值必须唯一。 - **DEFAULT**: 设置字段的默认值。 - **PRIMARY KEY**: 主键,用于唯一标识一条记录。 - **FOREIGN KEY**: 外键,用于与其他表建立联系。 - ...
- **AUTO_INCREMENT**:自动增长列。 - **UNIQUE**:指定某列或某几列的组合必须唯一。 - **DEFAULT**:设置某列的默认值。 - **PRIMARY KEY**:主键约束,标识表中的每一行记录。 - **FOREIGN KEY**:外键约束,...
- **自动增长**:`AUTO_INCREMENT` - **外键约束**:关联两个表的字段,`FOREIGN KEY` - **级联操作**:`ON DELETE CASCADE` 或 `ON UPDATE CASCADE` ### 五、多表操作 - **联接查询**:内连接(隐式和显式),外...