电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

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


发布日期:2023/2/13
 

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

上一篇:解析将多维数组转换为支持curl提交的一维数组格式

下一篇:ueditor 1.2.6 使用方法说明