您当前的位置: 首页 > 网站编程 > PHP教程 > mongo Table类文件 获取MongoCursor(游标)的实现方法分析

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

作者:不详 来源:网络 发布时间: 2014-08-15 08:54 点击:
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';

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

  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
分享到:
本文"mongo Table类文件 获取MongoCursor(游标)的实现方法分析"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4