mongodb的自增实现根oracle,postgresql是差不多,都是通过计数器来实现的
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); //插入数据 |
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔