Chinaunix首页 | 论坛 | 博客
  • 博客访问: 49011
  • 博文数量: 20
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 255
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-19 14:01
文章分类

全部博文(20)

文章存档

2014年(20)

我的朋友

分类: 数据库开发技术

2014-09-19 21:26:48

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, 
           uert: 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->Collection('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);   //插入数据   

阅读(1876) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:asp.net 中c# 遍历enum类型的例子

给主人留下些什么吧!~~