源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

mongo Table类文件 获取MongoCursor(游标)的实现方法分析

  • 时间:2022-02-02 00:32 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:mongo Table类文件 获取MongoCursor(游标)的实现方法分析
[b]MongoCursor Object [/b]游标类 [b]Mongo [/b]Config.php配置文件 Table.php(mongodb操作数据库类文件) [b]Config.php配置文件 [/b]
[u]复制代码[/u] 代码如下:
<?php require_once 'Zend/Exception.php'; class Hrs_Mongo_Config {     const VERSION = '1.7.0';     const DEFAULT_HOST = 'localhost';     const DEFAULT_PORT = 27017;     private static $host = self::DEFAULT_HOST ;     private static $port = self::DEFAULT_PORT ;     private static $options = array(             'connect' => true,             'timeout' => 30,             //'replicaSet' => '' //If this is given, the master will be determined by using the ismaster database command on the seeds     );     public static $conn = '';     public static $defaultDb = '';     public static $linkStatus = '';     public static function set($server = 'mongodb://localhost:27017', $options = array('connect' => true)) {         if(!$server){             $url = 'mongodb://'.self::$host.':'.self::$port;         }         if(is_array($server)){             if(isset($server['host'])){                 self::$host = $server['host'];             }             if(isset($server['port'])){                 self::$port = $server['port'];             }             if(isset($server['user']) && isset($server['pass'])){                 $url = 'mongodb://'.$server['user'].':'.$server['pass'].'@'.self::$host.':'.self::$port;             }else{                 $url = 'mongodb://'.self::$host.':'.self::$port;             }         }         if(is_array($options)){             foreach (self::$options as $o_k=>$o_v){                 if(isset($options[$o_k]))                     self::$options[$o_k] = $o_v;             }         }         try{                                    self::$conn = new Mongo($url, self::$options);             self::$linkStatus = 'success';         }catch (Exception $e){             self::$linkStatus = 'failed';         }         if(isset($server['database'])){             self::selectDB($server['database']);         }     }     public static function selectDB($database){         if($database){             try {                 if(self::$linkStatus=='success')                     self::$defaultDb = self::$conn->selectDB($database);                 return self::$defaultDb;             }             catch(InvalidArgumentException $e) {                 throw new Zend_Exception('Mongodb数据库名称不正确');             }         }else{             throw new Zend_Exception('Mongodb数据库名称不能为空');         }     } }
Table.php(mongodb操作数据库类文件)
[u]复制代码[/u] 代码如下:
<?php require_once 'Hrs/Mongo/Config.php'; abstract class Hrs_Mongo_Table {     protected $_db = '';     protected $_name = '';     protected $_data = array();     protected $c_options = array(             'fsync'=>true,             'safe'=>true     );     protected $u_options = array(     //'upsert'=>false,             'multiple'=>true,             'fsync'=>true,             'safe'=>true     );     /*      protected $r_options = array(      );*/     protected $d_options = array(             'fsync'=>true,             'justOne'=>false,             'safe'=>true     );     protected function _setAdapter($database=''){         if(!$database)             throw new Zend_Exception('Mongodb数据库名称不能为空');         Hrs_Mongo_Config::selectDB($database);     }     public function __construct() {         if(Hrs_Mongo_Config::$conn instanceof Mongo){             $name = $this->_name;             $defDb = Hrs_Mongo_Config::$defaultDb;             $this->_db = $defDb->$name;         }else{             throw new Zend_Exception('Mongodb服务器连接失败');         }     }     public function insert($data){         if(!$this->testLink()) return false;         $ret = $this->_db->insert($data, $this->c_options);         return $ret;     }     public function update($data, $where){         if(!$this->testLink()) return false;         return $this->_db->update($where, $data, $this->u_options);     }     public function find($where=array(),$limit=0){         if($this->testLink()) {             if($limit>0){                 $this->_data = $where ? $this->_db->find($where)->limit($limit)->snapshot() : $this->_db->find()->limit($limit)->snapshot();             }else{                 $this->_data = $where ? $this->_db->find($where)->limit($limit)->snapshot() : $this->_db->find()->limit($limit)->snapshot();             }         }         return $this;     }     //find cursor     /*      * 获取游标对象      */     public function look($where=array(),$fields=array()){         if($this->testLink()) {             if($fields){                 return $where ? $this->_db->find($where,$fields): $this->_db->find()->fields($fields);             }else{                 return $where ? $this->_db->find($where) : $this->_db->find();             }         }         return false;     }     public function delete($where){         if(!$this->testLink()) return false;         return $this->_db->remove($where, $this->d_options);     }     public function dropMe(){         if(!$this->testLink()) return false;         return $this->_db->drop();     }     public function __toString(){         return $this->_data;     }     public function toArray(){         $tmpData = array();         foreach($this->_data as $id=>$row){             $one_row = array();             foreach($row as $key=>$col){                 $one_row[$key] = $col;             }             $one_row['_id'] = $id;             $tmpData[] = $one_row;         }         return $tmpData;     }     protected function testLink(){         return Hrs_Mongo_Config::$linkStatus == 'success' ? true :false;     } }
要点注意!!! [b]第一种方法 [/b]
[u]复制代码[/u] 代码如下:
    //find cursor     /*      * 获取游标对象      */     public function look($where=array(),$fields=array()){         if($this->testLink()) {             if($fields){                 return $where ? $this->_db->find($where,$fields): $this->_db->find()->fields($fields);             }else{                 return $where ? $this->_db->find($where) : $this->_db->find();             }         }         return false;     }
[b]第二种方法 [/b]
[u]复制代码[/u] 代码如下:
    public function find($where=array(),$field=array()){         if($this->testLink()) {             $this->_data = $this->_db->find($where,$field)->sort(array("_id" => -1));         }         return $this;     }
[u]复制代码[/u] 代码如下:
    /*      * 获取游标对象      */     public function getCursor(){      return $this->_data;     }
[b]第二种需要的是find得到的不是数组 [/b]find($where)->getCursor();是MongoCursor Object [b] 注意注意 [/b]find()返回的是当前对象 toArray()方法是把当前对象转换为数组 getCursor()方法是把当前对象转换为MongoCursor Object(游标对象)
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部