mongodb資料庫中auto increment 自增

來源:互聯網
上載者:User

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);   //插入資料 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.