在MongoDB中模拟Auto Increment的php代码


Posted in PHP onMarch 06, 2011

代码大致如下所示:

<?php 
function generate_auto_increment_id($namespace, array $option = array()) 
{ 
$option += array( 
'init' => 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中findAndModify命令,只要每次往MongoDB里insert对象前生成ID赋值给_id就OK了,因为它的实现满足原子性,所以不存在并发问题。

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

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

参考:Auto Increment with MongoDB

PHP 相关文章推荐
PHP数组循环操作详细介绍 附实例代码
Feb 03 PHP
php读取目录所有文件信息dir示例
Mar 18 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
May 07 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
PHP闭包实例解析
Sep 08 PHP
PHP根据两点间的经纬度计算距离
Oct 31 PHP
简单概括PHP的字符串中单引号与双引号的区别
May 07 PHP
php is_writable判断文件是否可写实例代码
Oct 13 PHP
注释PHP和html混合代码的小技巧(分享)
Nov 03 PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 PHP
实例讲解PHP表单处理
Feb 15 PHP
YII框架常用技巧总结
Apr 27 PHP
PHP数组交集的优化代码分析
Mar 06 #PHP
php下安装配置fckeditor编辑器的方法
Mar 02 #PHP
PHP如何抛出异常处理错误
Mar 02 #PHP
php中实现记住密码自动登录的代码
Mar 02 #PHP
防止用户利用PHP代码DOS造成用光网络带宽
Mar 01 #PHP
php Smarty 字符比较代码
Feb 27 #PHP
php下批量挂马和批量清马代码
Feb 27 #PHP
You might like
复杂检索数据并分页显示的处理方法
2006/10/09 PHP
php中用数组的方法设置cookies
2011/04/21 PHP
十大使用PHP框架的理由
2015/09/26 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
JavaScript 事件对象的实现
2009/07/13 Javascript
jQuery 事件队列调整方法
2009/09/18 Javascript
jquery CSS选择器笔记
2010/03/29 Javascript
javascript 全等号运算符使用说明
2010/05/31 Javascript
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
js关闭浏览器窗口及检查浏览器关闭事件
2013/09/03 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
js实现简单的左右两边固定广告效果实例
2015/04/10 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
jquery插入兄弟节点的操作方法
2016/12/07 Javascript
原生js实现焦点轮播图效果
2017/01/12 Javascript
vue-axios使用详解
2017/05/10 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
2018/07/13 Javascript
vue-cli3使用 DllPlugin 实现预编译提升构建速度
2019/04/24 Javascript
深入理解python多进程编程
2016/06/12 Python
windows10下安装TensorFlow Object Detection API的步骤
2019/06/13 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
python3 线性回归验证方法
2019/07/09 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
Python中的Cookie模块如何使用
2020/06/04 Python
基于python实现模拟数据结构模型
2020/06/12 Python
windows支持哪个版本的python
2020/07/03 Python
Python用来做Web开发的优势有哪些
2020/08/05 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
学校食堂采购员岗位职责
2013/12/05 职场文书
优秀村官事迹材料
2014/01/10 职场文书
小学生开学第一课活动方案
2014/03/27 职场文书
春节晚会开场白
2015/05/29 职场文书
反腐倡廉学习心得体会范文
2015/08/15 职场文书
python数据分析之单因素分析线性拟合及地理编码
2022/06/25 Python