mongodb php auto increment 自增
mongodb的自增实现根oracle,postgresql是差不多,都是通过计数器来实现的.
oracle自增实现: 实例说明oracle序列用法
postgresql自增实现: postgresql auto_increment 实现 通用方法
1,mongodb命令行下实现auto_increment
- > db.counters.insert( //计数器表
- {
- _id: "userid",
- seq: 0
- }
- );
- WriteResult({ "nInserted" : 1 })
- > db.counters.find();
- { "_id" : "userid", "seq" : 0 }
- > function getNextSequence(name) { //取下个ID的函数
- var ret = db.counters.findAndModify(
- {
- query: { _id: name },
- update: { $inc: { seq: 1 } }, //这里seq就是上面counters表中的seq字段
- new: true,
- upsert: true
- }
- );
- return ret.seq;
- };
- > db.users.insert( //插入数据
- {
- _id: getNextSequence("userid"),
- name: "tank"
- }
- );
- WriteResult({ "nInserted" : 1 })
- > db.users.find(); //查看
- { "_id" : 1, "name" : "tank" }
- > db.users.insert(
- {
- _id: getNextSequence("userid"),
- name: "test"
- }
- );
- WriteResult({ "nInserted" : 1 })
- > db.users.find();
- { "_id" : 1, "name" : "tank" }
- { "_id" : 2, "name" : "test" }
2,php实现auto_increment
- function getNextId($mongo,$name,$param=array()){
- $param += array( //默认ID从1开始,间隔是1
- 'init' => 1,
- 'step' => 1,
- );
- $update = array('$inc'=>array('id'=>$param['step'])); //设置间隔
- $query = array('name'=>$name);
- $command = array(
- 'findandmodify' => 'ids',
- 'update' => $update,
- 'query' => $query,
- 'new' => true
- );
- $id = $mongo->db->command($command);
- if (isset($id['value']['id'])) {
- return $id['value']['id'];
- }else{
- $mongo->insert(array(
- 'name' => $name,
- 'id' => $param['init'], //设置ID起始数值
- ));
- return $param['init'];
- }
- }
- $mongo = new Mongo();
- $curDB = $mongo->selectCollection('test', 'ids'); //test库中的ids表
- $user = $mongo->selectCollection('test', 'users'); //test库中的users表
- $id = getNextId($curDB,'userid',array('init'=>10000,'step'=>2)); //取得下一条数据的ID
- $obj = array("_id"=>$id,"name"=>"tankzhang");
- $user->insert($obj); //插入数据
mongodb php auto increment 自增的更多相关文章
- mongodb 创建auto increment 自增函数
计数器表 > db.counters.insert({_id: "userid",seq: 0} ); > db.counters.find(); { " ...
- SQL——AUTO INCREMENT(字段自增)
AUTO INCREMENT -- 在新记录插入表中时生成一个唯一的数字.插入表数据时,该字段不需规定值. 在每次插入新记录时,自动地创建主键字段的值.在表中创建一个 auto-incremen ...
- MongoDB下载安装与简单增删改查
Windows下MongoDB的安装和配置.启动和停止 下载地址:MongoDB的官方下载网址是:https://www.mongodb.org/downloads 安装步骤1. 点击下载的mongo ...
- SQL AUTO INCREMENT 字段
Auto-increment 会在新记录插入表中时生成一个唯一的数字. AUTO INCREMENT 字段 我们通常希望在每次插入新记录时,自动地创建主键字段的值. 我们可以在表中创建一个 auto- ...
- sql server auto increment - trace flag 272
从 sql 2012 开始, 微软为了让 insert 时 auto increment 快一些,做了一个 cache 的机制. 这个机制虽然好,但是也有麻烦的情况,如果你的 sql 突然 resta ...
- 19. AUTO INCREMENT 字段
Auto-increment 会在新记录插入表中时生成一个唯一的数字. AUTO INCREMENT 字段 我们通常希望在每次插入新记录时,自动地创建主键字段的值. 我们可以在表中创建一个 auto- ...
- SQL-W3School-高级:SQL AUTO INCREMENT 字段
ylbtech-SQL-W3School-高级:SQL AUTO INCREMENT 字段 1.返回顶部 1. Auto-increment 会在新记录插入表中时生成一个唯一的数字. AUTO INC ...
- mysql AUTO INCREMENT字段 语法
mysql AUTO INCREMENT字段 语法 作用:在新记录插入表中时生成一个唯一的数字 说明:我们通常希望在每次插入新记录时,自动地创建主键字段的值.我们可以在表中创建一个 auto-incr ...
- Node.js、express、mongodb 入门(基于easyui datagrid增删改查)
前言 从在本机(win8.1)环境安装相关环境到做完这个demo大概不到两周时间,刚开始只是在本机安装环境并没有敲个Demo,从周末开始断断续续的想写一个,按照惯性思维就写一个增删改查吧,一方面是体验 ...
随机推荐
- angular学习笔记(十三)
本篇主要介绍控制器的$scope中的数据是如何被改变的: 以下三种方法,都可以改变$scope中的number值: 1. 表达式: <span ng-click="number=num ...
- CSocket类网络编程 MFC
Visual C++的MFC提供了CSocket类用来实现网络通信. 下面介绍VC++在Windows 95中实现Socket的 CSocket 类相关成员函数(这些成员函数实际上是从CAsyncSo ...
- Java web项目中java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
原来是tomcat找不到MYSQL JAR包的问题.后来又把mysql-connector-java-5.1.7-bin.jar导入到tomcat的lib目录下面就ok了,嘿…… 在java项目中,只 ...
- [转][SQL] SSIS 简单应用 数据库汇入导出设定& SQL Agent定期排程
前言 本篇不是要說高深的SSIS 技巧,而是用實例的方式,說明如何應用 Visual Studio 的「Business Intelligence Projects」來建立「Integration S ...
- JDK和OpenJDK的区别
简言之,open jdk 是 oracle(sun) jdk的精简版,如果本地运行有问题,linux服务器有问题,首先排除open jdk版本的问题. 使用过LINUX的人都应该知道,在大多数LINU ...
- egret学习记录
最近h5小游戏比较流行,本来我是做cocos2dx的,一开始想用它的js版. 可惜看着js真是头大.于是选择了egret,egret采用typescript,学过面向对象的,上手还是比较快的,而且ap ...
- java质量提升相关
http://blog.sina.com.cn/s/blog_6814a1510102v2rp.html
- Java并发(四)多线程开销
从单线程应用转变为多线程应用并不只是带来好处.这种转变也会带来一定得开销得.并不是所有时候都要把你的应用编程多线程的.你应该明白这样做确实会带来好处,而且这种好处要比开销大.如果你不确定的话,要试着去 ...
- 初看mysql源代码之mysql.cc
在mysql的源代码目录中,sql目录是mysql源代码中经常变化的目录之一,也是MySQL服务器内核最为核心和重要的目录. sql目录除了包含mysqld.cc这一MySQL main函数所在文件外 ...
- prometheus报警消息钉钉通知
设置prometheus 的web hook 为对应服务: 报警的配置如下,设置了web hook url,报警就会把消息发给web hookurl,但是这里的数据格式和钉钉要求的格式不一样,所以后面 ...