【mongodb是什么数据库】mongodb数据库中auto increment 自增

更新时间:2019-07-11    来源:PostgreSQL    手机版     字体:

【www.bbyears.com--PostgreSQL】

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);   //插入数据 

本文来源:http://www.bbyears.com/shujuku/57479.html

热门标签

更多>>

本类排行