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
注意注意
find()返回的是当前对象
toArray()方法是把当前对象转换为数组
getCursor()方法是把当前对象转换为MongoCursor Object(游标对象)