mongodb的自增实现根oracle,postgresql是差不多,都是通过计数器来实现的.

oracle自增实现: 实例说明oracle序列用法

postgresql自增实现: postgresql auto_increment 实现 通用方法

1,mongodb命令行下实现auto_increment

  1. > db.counters.insert(             //计数器表
  2. {
  3. _id: "userid",
  4. seq: 0
  5. }
  6. );
  7. WriteResult({ "nInserted" : 1 })
  8. > db.counters.find();
  9. { "_id" : "userid", "seq" : 0 }
  10. > function getNextSequence(name) {      //取下个ID的函数
  11. var ret = db.counters.findAndModify(
  12. {
  13. query: { _id: name },
  14. update: { $inc: { seq: 1 } },  //这里seq就是上面counters表中的seq字段
  15. new: true,
  16. upsert: true
  17. }
  18. );
  19. return ret.seq;
  20. };
  21. > db.users.insert(       //插入数据
  22. {
  23. _id: getNextSequence("userid"),
  24. name: "tank"
  25. }
  26. );
  27. WriteResult({ "nInserted" : 1 })
  28. > db.users.find();     //查看
  29. { "_id" : 1, "name" : "tank" }
  30. > db.users.insert(
  31. {
  32. _id: getNextSequence("userid"),
  33. name: "test"
  34. }
  35. );
  36. WriteResult({ "nInserted" : 1 })
  37. > db.users.find();
  38. { "_id" : 1, "name" : "tank" }
  39. { "_id" : 2, "name" : "test" }

2,php实现auto_increment

  1. function getNextId($mongo,$name,$param=array()){
  2. $param += array(   //默认ID从1开始,间隔是1
  3. 'init' => 1,
  4. 'step' => 1,
  5. );
  6. $update = array('$inc'=>array('id'=>$param['step']));   //设置间隔
  7. $query = array('name'=>$name);
  8. $command = array(
  9. 'findandmodify' => 'ids',
  10. 'update' => $update,
  11. 'query' => $query,
  12. 'new' => true
  13. );
  14. $id = $mongo->db->command($command);
  15. if (isset($id['value']['id'])) {
  16. return $id['value']['id'];
  17. }else{
  18. $mongo->insert(array(
  19. 'name' => $name,
  20. 'id' => $param['init'],     //设置ID起始数值
  21. ));
  22. return $param['init'];
  23. }
  24. }
  25. $mongo = new Mongo();
  26. $curDB = $mongo->selectCollection('test', 'ids');     //test库中的ids表
  27. $user = $mongo->selectCollection('test', 'users');      //test库中的users表
  28. $id = getNextId($curDB,'userid',array('init'=>10000,'step'=>2));   //取得下一条数据的ID
  29. $obj = array("_id"=>$id,"name"=>"tankzhang");
  30. $user->insert($obj);   //插入数据

mongodb php auto increment 自增的更多相关文章

  1. mongodb 创建auto increment 自增函数

    计数器表  > db.counters.insert({_id: "userid",seq: 0}  ); > db.counters.find();  { " ...

  2. SQL——AUTO INCREMENT(字段自增)

    AUTO INCREMENT -- 在新记录插入表中时生成一个唯一的数字.插入表数据时,该字段不需规定值.    在每次插入新记录时,自动地创建主键字段的值.在表中创建一个 auto-incremen ...

  3. MongoDB下载安装与简单增删改查

    Windows下MongoDB的安装和配置.启动和停止 下载地址:MongoDB的官方下载网址是:https://www.mongodb.org/downloads 安装步骤1. 点击下载的mongo ...

  4. SQL AUTO INCREMENT 字段

    Auto-increment 会在新记录插入表中时生成一个唯一的数字. AUTO INCREMENT 字段 我们通常希望在每次插入新记录时,自动地创建主键字段的值. 我们可以在表中创建一个 auto- ...

  5. sql server auto increment - trace flag 272

    从 sql 2012 开始, 微软为了让 insert 时 auto increment 快一些,做了一个 cache 的机制. 这个机制虽然好,但是也有麻烦的情况,如果你的 sql 突然 resta ...

  6. 19. AUTO INCREMENT 字段

    Auto-increment 会在新记录插入表中时生成一个唯一的数字. AUTO INCREMENT 字段 我们通常希望在每次插入新记录时,自动地创建主键字段的值. 我们可以在表中创建一个 auto- ...

  7. SQL-W3School-高级:SQL AUTO INCREMENT 字段

    ylbtech-SQL-W3School-高级:SQL AUTO INCREMENT 字段 1.返回顶部 1. Auto-increment 会在新记录插入表中时生成一个唯一的数字. AUTO INC ...

  8. mysql AUTO INCREMENT字段 语法

    mysql AUTO INCREMENT字段 语法 作用:在新记录插入表中时生成一个唯一的数字 说明:我们通常希望在每次插入新记录时,自动地创建主键字段的值.我们可以在表中创建一个 auto-incr ...

  9. Node.js、express、mongodb 入门(基于easyui datagrid增删改查)

    前言 从在本机(win8.1)环境安装相关环境到做完这个demo大概不到两周时间,刚开始只是在本机安装环境并没有敲个Demo,从周末开始断断续续的想写一个,按照惯性思维就写一个增删改查吧,一方面是体验 ...

随机推荐

  1. 【Android】第21章 2D图形和动画

    分类:C#.Android.VS2015: 创建日期:2016-03-19 一.简介 Android系统定义了一系列独立的图形处理类,其中,2D图形处理类分别位于以下命名空间: Android.Gra ...

  2. 【Android】3.19 示例19--全景图HelloWorld

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 百度全景图是一种实景地图服务.为用户提供城市.街道和其他环境的360度全景图像,用户可以通过该服务获得如临其境 ...

  3. 【Android】3.17 示例17--周边雷达功能

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 周边雷达功能同步支持Android和iOS端.它本质是一个连接百度LBS开放平台前端SDK产品和后端 ...

  4. php获取某年某月的天数

    function days_in_month($month, $year) { // calculate number of days in a month return $month == 2 ? ...

  5. 李洪强和你一起学习前端之(6)css行高,盒模型,外边距

    李洪强和你一起学习前端之(6)css行高,盒模型,外边距 复习昨天的知识 1.1css书写位置: 内嵌式写法 外联式写法 <link href = "1.css" rel = ...

  6. 原声js实现addClass removeClass toggleClass效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. bootstrap中模态框的大小设置

    <!-- 大模态框的调节 --> <button type="button" class="btn btn-primary" data-tog ...

  8. mysql show variables

    1. back_log 指定MySQL可能的连接数量.当MySQL主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花些时间(尽管很短)检查连接并且启动一个新线程. back_log ...

  9. tomcat架构分析(connector BIO 实现)

    出处:http://gearever.iteye.com 在tomcat架构分析(概览)中已经介绍过,connector组件是service容器中的一部分.它主要是接收,解析http请求,然后调用本s ...

  10. 【Visual Studio】控制台程序运行时一闪而过

    问题:写一个C#控制台程序,运行时控制台一闪而过.程序结束.无法看清控制台输出的结果. 办法: 方法一二三都有人写过百度经验了:怎么解决VS运行程序一闪而过 其实还有一种办法,就是把控制台程序改为Wi ...