在MongoDB中模拟Auto Increment的php代码

 更新时间:2011年03月06日 22:23:24   作者:  
MySQL用户多半都有Auto Increment情结,不过MongoDB缺省并没有实现,所以需要模拟一下,编程语言以PHP为例
代码大致如下所示:
复制代码 代码如下:

<?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获取链表中倒数第K个节点的方法

    PHP获取链表中倒数第K个节点的方法

    这篇文章主要介绍了PHP获取链表中倒数第K个节点的方法,涉及php针对链表的遍历、判断等相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • php+ajax 文件上传代码实例

    php+ajax 文件上传代码实例

    这篇文章主要介绍了php+ajax的文件上传,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 如何使用PHP计算上一个月的今天

    如何使用PHP计算上一个月的今天

    本篇文章是对用PHP计算上一个月的今天的实例进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】

    PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】

    这篇文章主要介绍了PHP操作MySQL中BLOB字段的方法,结合具体实例形式分析了php使用mysql的BLOB字段存储新闻内容与图片的相关操作技巧,需要的朋友可以参考下
    2017-09-09
  • php基本函数汇总

    php基本函数汇总

    本文给大家汇总了16个常见的php基本函数,涵盖的面很广,这里推荐给大家,希望对大家学习php能够有所帮助。
    2015-07-07
  • PHP文件锁定写入实例解析

    PHP文件锁定写入实例解析

    这篇文章主要介绍了PHP文件锁定写入实例解析,需要的朋友可以参考下
    2014-07-07
  • thinkphp多表查询两表有重复相同字段的完美解决方法

    thinkphp多表查询两表有重复相同字段的完美解决方法

    下面小编就为大家带来一篇thinkphp多表查询两表有重复相同字段的完美解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • PHP数字金额转换成中文大写显示

    PHP数字金额转换成中文大写显示

    今天小编就为大家分享一篇关于PHP数字金额转换成中文大写显示,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • php如何实现只替换一次或N次

    php如何实现只替换一次或N次

    这篇文章主要介绍了php如何实现只替换一次或只替换N次,通过一个简单的例子引入主题,感性的朋友可以参考一下
    2015-10-10
  • PHP操作Mongodb封装类完整实例

    PHP操作Mongodb封装类完整实例

    这篇文章主要介绍了PHP操作Mongodb封装类,结合完整实例形式分析了php封装的针对MongoDB数据库常见的基本配置、连接、增删改查、集合等操作定义与使用方法,需要的朋友可以参考下
    2018-06-06

最新评论