在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 相关文章推荐
PHPMailer 中文使用说明小结
Jan 22 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
Jun 24 PHP
php实现的Cookies操作类实例
Sep 24 PHP
php管理nginx虚拟主机shell脚本实例
Nov 19 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
Dec 16 PHP
微信公众平台消息接口校验与消息接口响应实例
Dec 23 PHP
Symfony数据校验方法实例分析
Jan 26 PHP
深入理解PHP中的Streams工具
Jul 03 PHP
php代码检查代理ip的有效性
Aug 19 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
Sep 11 PHP
PHP实现的同步推荐操作API接口案例分析
Nov 30 PHP
PHP实现截取中文字符串不出现?号的解决方法
Dec 29 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
用PHP伪造referer突破网盘禁止外连的代码
2008/06/15 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
解析如何屏蔽php中的phpinfo()函数
2013/06/06 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
Laravel使用支付宝进行支付的示例代码
2017/08/16 PHP
JavaScript 创建对象和构造类实现代码
2009/07/30 Javascript
一个简单的javascript类定义例子
2009/09/12 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
javascript匿名函数实例分析
2014/11/18 Javascript
bootstrapValidator bootstrap-select验证不可用的解决办法
2017/01/11 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
React Hooks的深入理解与使用
2018/11/12 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
python实现二维码扫码自动登录淘宝
2016/12/27 Python
pandas ix &amp;iloc &amp;loc的区别
2019/01/10 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
python常用库之NumPy和sklearn入门
2019/07/11 Python
Python模拟伯努利试验和二项分布代码实例
2020/05/27 Python
Css3+Js制作漂亮时钟(附源码)
2013/04/24 HTML / CSS
html5新特性与用法大全
2018/09/13 HTML / CSS
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
广州地球村科技数据库题目
2016/04/25 面试题
创先争优制度
2014/01/21 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
网络营销计划书
2015/01/17 职场文书
2015年销售工作总结范文
2015/03/30 职场文书
2015年银行工作总结范文
2015/04/01 职场文书
组织委员竞选稿
2015/11/21 职场文书
小学数学新课改心得体会
2016/01/22 职场文书
浅谈MySQL user权限表
2021/06/18 MySQL
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python