程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> mongo Table類文件 獲取MongoCursor(游標)的實現方法分析

mongo Table類文件 獲取MongoCursor(游標)的實現方法分析

編輯:關於PHP編程

    MongoCursor Object
    游標類

    Mongo
    Config.php配置文件
    Table.php(mongodb操作數據庫類文件)

    Config.php配置文件

    復制代碼 代碼如下:
    <?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操作數據庫類文件)

    復制代碼 代碼如下:
    <?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;
    }
    }


    要點注意!!!
    第一種方法

    復制代碼 代碼如下:
    //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 find($where=array(),$field=array()){
    if($this->testLink()) {
    $this->_data = $this->_db->find($where,$field)->sort(array("_id" => -1));
    }
    return $this;
    }

     

    復制代碼 代碼如下:
    /*
    * 獲取游標對象
    */
    public function getCursor(){
    return $this->_data;
    }


    第二種需要的是find得到的不是數組
    find($where)->getCursor();是MongoCursor Object

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved