1. 程式人生 > >PHP Mongodb類

PHP Mongodb類

/*********************************************************************************
 * InitPHP 2.0 國產PHP開發框架  Dao-Nosql-Mongo 
 *-------------------------------------------------------------------------------
 * 版權所有: CopyRight By initphp.com
 * 您可以自由使用該原始碼,但是在使用過程中,請保留作者資訊。尊重他人勞動成果就是尊重自己
 *-------------------------------------------------------------------------------
 * $Author:zhuli
 * $Dtime:2011-10-09 
***********************************************************************************/
class mongoInit {

	private $mongo; //mongo物件
	private $db; //db mongodb物件資料庫
	private $collection; //集合,相當於資料表 
	
	/**
	 * 初始化Mongo
	 * $config = array(
	 * 'server' => ‘127.0.0.1' 伺服器地址
	 * ‘port’   => '27017' 埠地址
	 * ‘option’ => array('connect' => true) 引數
	 * 'db_name'=> 'test' 資料庫名稱
	 * ‘username’=> 'zhuli' 資料庫使用者名稱
	 * ‘password’=> '123456' 資料庫密碼
	 * )
	 * Enter description here ...
	 * @param unknown_type $config
	 */
	public function init($config = array()) {
		if ($config['server'] == '')  $config['server'] = '127.0.0.1';
		if ($config['port'] == '')  $config['port'] = '27017';
		if (!$config['option']) $config['option'] = array('connect' => true);
		$server = 'mongodb://' . $config['server'] . ':' . $config['port'];
		$this->mongo = new Mongo($server, $options);
		if ($config['db_name'] == '') $config['db_name'] = 'test';
		$this->db = $this->mongo->selectDB($config['db_name']);
		if ($config['username'] != '' && $config['password'] != '') 
			$this->db->authenticate($config['username'], $config['password']);
	}
	
	/**
	 * 選擇一個集合,相當於選擇一個數據表
	 * @param string $collection 集合名稱
	 */
	public function selectCollection($collection) {
		return $this->collection = $this->db->selectCollection($collection);
	}
	
	/**
	 * 新增資料
	 * @param array $data 需要新增的資料 例如:array('title' => '1000', 'username' => 'xcxx')
	 * @param array $option 引數
	 */
	public function insert($data, $option = array()) {
		return $this->collection->insert($data, $option);
	}
	
	/**
	 * 批量新增資料
 	 * @param array $data 需要新增的資料 例如:array(0=>array('title' => '1000', 'username' => 'xcxx'))
	 * @param array $option 引數
	 */
	public function batchInsert($data, $option = array()) {
		return $this->collection->batchInsert($data, $option);
	}
	
	/**
	 * 儲存資料,如果已經存在在庫中,則更新,不存在,則新增
 	 * @param array $data 需要新增的資料 例如:array(0=>array('title' => '1000', 'username' => 'xcxx'))
	 * @param array $option 引數
	 */
	public function save($data, $option = array()) {
		return $this->collection->save($data, $option);
	}
	
	/**
	 * 根據條件移除
 	 * @param array $query  條件 例如:array(('title' => '1000'))
	 * @param array $option 引數
	 */
	public function remove($query, $option = array()) {
		return $this->collection->remove($query, $option);
	}
	
	/**
	 * 根據條件更新資料
 	 * @param array $query  條件 例如:array(('title' => '1000'))
 	 * @param array $data   需要更新的資料 例如:array(0=>array('title' => '1000', 'username' => 'xcxx'))
	 * @param array $option 引數
	 */
	public function update($query, $data, $option = array()) {
		return $this->collection->update($query, $data, $option);
	}
	
	/**
	 * 根據條件查詢一條資料
 	 * @param array $query  條件 例如:array(('title' => '1000'))
	 * @param array $fields 引數
	 */
	public function findOne($query, $fields = array()) {
		return $this->collection->findOne($query, $fields);
	}
	
	/**
	 * 根據條件查詢多條資料
	 * @param array $query 查詢條件
	 * @param array $sort  排序條件 array('age' => -1, 'username' => 1)
	 * @param int   $limit 頁面
	 * @param int   $limit 查詢到的資料條數
	 * @param array $fields返回的欄位
	 */
	public function find($query, $sort = array(), $skip = 0, $limit = 0, $fields = array()) {
		$cursor = $this->collection->find($query, $fields);
		if ($sort)  $cursor->sort($sort);
		if ($skip)  $cursor->skip($skip);
        if ($limit) $cursor->limit($limit);
		return iterator_to_array($cursor);
	}
	
	/**
	 * 資料統計
	 */
	public function count() {
		return $this->collection->count();
	}
	
	/**
	 * 錯誤資訊
	 */
	public function error() {
		return $this->db->lastError();
	}
	
	/**
	 * 獲取集合物件
	 */
	public function getCollection() {
		return $this->collection;
	}
	
	/**
	 * 獲取DB物件
	 */
	public function getDb() {
		return $this->db;
	}
	
	
}