<?php
include_once dirname(dirname(dirname(__FILE__))).DIRECTORY_SEPARATOR.'Config'.DIRECTORY_SEPARATOR.'database.php';
class MongoClass3{
static public $conn;//数据库连接
static public $db;//数据库选择
static public $collection;//结果集合
public $debug;
public function __construct($type=0){
$database='';
$database = new DATABASE_CONFIG();
if($type==1){
$mongo_master = $database->mongo_hems3;
}else if($type==2) {
$mongo_master = $database->mongo162;
}else if($type == 3) {
$mongo_master = $database->mongo_yuanchuang;
} else if($type==5) {
$mongo_master = $database->mongo_backup;
}
else if($type == 0){
$mongo_master = $database->mongo;
}
$host_master = $mongo_master['host'];
$database = $mongo_master['database'];
$port = $mongo_master['port'];
$this->debug = true;
// $this->conn = new Mongo("mongodb://${username}:${password}@${host}");
// $this->conn = new Mongo("mongodb://${host_master},${host_slave}",array("replicaSet" => "shard"));
try{
$this->conn = new Mongo("mongodb://${host_master}:${port}");
}catch(Exception $e){
$str = $e."\r\n".date('Y-m-d H:i:s',time())." 连接mongo失败\r\n";
$this->getMongoLogo($str);
return false;
}
// $this->conn=$db->admin;
// $this->conn->authenticate('root', '123456');
$this->db = $this->conn->{$database};
}
/**
* Description 查询配置表hems_basic记录数 可按条件查询记录数
* @param Array $conditions 可为空 条件格式为数组 array('字段1'=>'字段值1','字段2'=>'字段值2') 表示条件之间是AND关系
* @return int $count
*
*/
public function getCount($collection,$conditions = array()){
$this->collection = $this->db->{$collection};
$count = $this->collection->find($conditions)->count();
return $count;
}
/**
* Description 根据条件查询配置表hems_basic文档
* @param Array $conditions 可为空 条件格式为数组 array('字段1'=>'字段值1','字段2'=>'字段值2') 表示条件之间是AND关系
* @return Array $res 返回的结果是mongo对象需要遍历才能取出数据
*
*/
public function getData($collection,$conditions = array(),$field=array(),$order=array(),$start=0,$pernum=20){
$this->collection = $this->db->{$collection};
if(empty($collection)){
return false;
}
try {
if($start==1&&$pernum==0){
if($order){
$res = $this->collection->find($conditions,$field)->slaveOkay(true)->sort($order);
}else{
$res = $this->collection->find($conditions,$field)->slaveOkay(true);
}
}else{
if($order){
$res = $this->collection->find($conditions,$field)->slaveOkay(true)->sort($order)->skip($start)->limit($pernum);
}else{
$res = $this->collection->find($conditions,$field)->slaveOkay(true)->skip($start)->limit($pernum);
}
}
}catch(Exception $e){
$res = array();
$str = date('Y-m-d H:i:s',time())." 从集合".$collection."获取数据\r\n条件为:\r\n";
$str1= '';
foreach($conditions as $key => $val){
$str1.= $key."------------".$val."\r\n";
}
$this->getMongoLogo($str.$str1."失败\r\n");
return false;
}
try{
$res->rewind();
}catch(Exception $e){
$str = date('Y-m-d H:i:s',time())." 从集合".$collection."获取数据\r\n条件为:\r\n";
$str1= '';
foreach($conditions as $key => $val){
$str1.= $key."------------".$val."\r\n";
}
$this->getMongoLogo($str.$str1."失败\r\n");
return false;
}
if($res->valid()){
return iterator_to_array($res,true);
}else{
return false;
}
}
/**
* Description 根据条件查询配置表hems_basic文档
* @param Array $conditions 可为空 条件格式为数组 array('字段1'=>'字段值1','字段2'=>'字段值2') 表示条件之间是AND关系
* @return Array $res 返回的结果是mongo对象需要遍历才能取出数据
*
*/
public function getDataOr($collection,$conditions){
$this->collection = $this->db->{$collection};
$res = $this->collection->find(array('$or'=>$conditions));
return $res;
}
/**
* Description 计算数据表中所有文档数(按条件计算,无条件计算整个集合的总数)
* @param Array $conditions 可为空 条件格式为数组 array('字段1'=>'字段值1','字段2'=>'字段值2') 表示条件之间是AND关系
* @return int $count
*/
public function getIdDataCount($collection,$conditions = array()){
$this->collection = $this->db->{$collection};
$count = $this->collection->find($conditions)->count();
return $count;
}
/**
* Description 根据条件或者配置表中的_id到hems_data数据表中取出对应所有文档文档
* @param Array $conditions 可为空 条件格式为数组 array('字段1'=>'字段值1','字段2'=>'字段值2') 表示条件之间是AND关系
* @return Array $res 返回的结果是mongo对象需要遍历才能取出数据
*/
public function getIdData($collection,$conditions){
$this->collection = $this->db->{$collection};
$res = $this->collection->find($conditions);
return $res;
}
/**
* Description 根据条件修改数据表文档
* @param Array $conditions $data $conditions格式为数组 array('字段1'=>'字段值1','字段2'=>'字段值2') 表示多个条件并列
* $data格式为数组 array('字段1'=>'字段值1','字段2'=>'字段值2') 表示修改的字段
*/
public function editData($collection,$conditions,$data){
$this->collection = $this->db->{$collection};
if($this->collection->update($conditions ,array('$set'=>$data),array('multiple'=>1))){
$code = 1;
$msg = '修改成功!';
}else{
$code = 0;
$msg = '修改失败!';
}
return array('code'=>$code,'msg'=>$msg);
}
/*
* Description 根据条件删除数据表文档
* @param Array $conditions $conditions格式为数组 array('字段1'=>'字段值1','字段2'=>'字段值2') 表示多个条件并列
*/
public function delData($collection,$conditions){
$this->collection = $this->db->{$collection};
if($this->collection->remove($conditions)){
$code = 1;
$msg = '删除成功!';
}else{
$code = 0;
$msg = '删除失败!';
}
return array('code'=>$code,'msg'=>$msg);
}
/*
* Description 插入操作
* 根据主键_id判断,如果该记录已经存在则
*/
public function save($collection,$field,$flag=0){
$this->collection = $this->db->{$collection};
$log = "";
foreach($field as $kdata => $vdata){
$log .= $kdata.":".$vdata.",";
}
$log = trim($log,",");
$newLog = "\r\n-------\r\ntime:".date("Y-m-d H:i:s")."\r\ndata".$log;
$oldLog = file_get_contents("../tmp/mongoLog.txt");
@file_put_contents("../tmp/mongoLog.txt",$oldLog.$newLog);
if($flag){
$result = $this->collection->save($field,array('safe'=>1));
}else{
$result = $this->collection->insert($field,array('safe'=>1));
}
return $result;
}
}
?>
转载于:https://blog.51cto.com/okowo/1690710