熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

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

2013-11-15 12:36:38  來源: PHP編程 

  MongoCursor Object
游標類

Mongo
Configphp配置文件
Tablephp(mongodb操作數據庫類文件)

Configphp配置文件

復制代碼 代碼如下:
<?php
require_once Zend/Exceptionphp;
class Hrs_Mongo_Config
{
const VERSION = ;
const DEFAULT_HOST = localhost;
const DEFAULT_PORT = ;
private static $host = self::DEFAULT_HOST ;
private static $port = self::DEFAULT_PORT ;
private static $options = array(
connect => true
timeout =>
//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: $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數據庫名稱不能為空);
}
}
}

  
Tablephp(mongodb操作數據庫類文件)

復制代碼 代碼如下:
<?php
require_once Hrs/Mongo/Configphp;
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=){
if($this>testLink()) {
if($limit>){
$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" => ));
}
return $this;
} 復制代碼 代碼如下:
/*
* 獲取游標對象
*/
public function getCursor(){
return $this>_data;
}

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


From:http://tw.wingwit.com/Article/program/PHP/201311/21268.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.