博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mongodb 自动增长 自增id 实现 -3 PHP
阅读量:4130 次
发布时间:2019-05-25

本文共 1003 字,大约阅读时间需要 3 分钟。

MySQL用户多半都有Auto Increment情结,不过MongoDB缺省并没有实现,所以需要模拟一下,编程语言以PHP为例,代码大致如下所示:

1, 'step' => 1, ); $instance = new Mongo(); $instance = $instance->selectCollection('_seq', 'seq'); $seq = $instance->db->command(array( 'findAndModify' => 'seq', 'query' => array('_id' => $namespace), 'update' => array('$inc' => array('id' => $option['step'])), 'new' => true, )); if (isset($seq['value']['id'])) { return $seq['value']['id']; } $instance->insert(array( '_id' => $namespace, 'id' => $option['init'], )); return $option['init'];}var_dump(generate_auto_increment_id('foo'));var_dump(generate_auto_increment_id('bar', array('init' => 123)));?>

其具体实现方式主要是利用MongoDB中命令,只要每次往MongoDB里insert对象前生成ID赋值给_id就OK了,因为它的实现满足原子性,所以不存在并发问题。

另外说明一点,findAndModify本身提供了一个upsert参数,为true的话可以自动insert,但那样就不能自定义初始值了,所以文中示例没有使用upsert。

BTW,数据库“_seq”的名字以下划线开头,这样列表的时候会排在前面,容易分辨。

参考:

mongoDB 数据文件超过2G后,写入就超级慢了。解决方法:shard 分片

转载地址:http://aybvi.baihongyu.com/

你可能感兴趣的文章
浅谈HTML
查看>>
css基础
查看>>
Servlet进阶和JSP基础
查看>>
servlet中的cookie和session
查看>>
过滤器及JSP九大隐式对象
查看>>
软件(项目)的分层
查看>>
菜单树
查看>>
Servlet的生命周期
查看>>
JAVA八大经典书籍,你看过几本?
查看>>
《读书笔记》—–书单推荐
查看>>
JAVA数据类型
查看>>
【Python】学习笔记——-6.2、使用第三方模块
查看>>
【Python】学习笔记——-7.0、面向对象编程
查看>>
【Python】学习笔记——-7.2、访问限制
查看>>
【Python】学习笔记——-7.3、继承和多态
查看>>
【Python】学习笔记——-7.5、实例属性和类属性
查看>>
git中文安装教程
查看>>
虚拟机 CentOS7/RedHat7/OracleLinux7 配置静态IP地址 Ping 物理机和互联网
查看>>
Jackson Tree Model Example
查看>>
常用js收集
查看>>