php mongodb操作类 带几个简单的例子
之前毛票票已经发过几篇类似的文章,大家可以参考一下。
核心代码:
classNewMongodb{
private$mongo;//NewMongodb连接
private$curr_db_name;
private$curr_table_name;
private$error;
public$config;
publicfunctiongetInstance($mongo_server,$flag=array())
{
static$NewMongodb_arr;
if(empty($flag['tag']))
{
$flag['tag']='default';}
if(isset($flag['force'])&&$flag['force']==true)
{
$mongo=newNewMongodb($mongo_server);
if(empty($NewMongodb_arr[$flag['tag']]))
{
$NewMongodb_arr[$flag['tag']]=$mongo;
}
return$mongo;
}
elseif(isset($NewMongodb_arr[$flag['tag']])&&is_resource($NewMongodb_arr[$flag['tag']]))
{
return$NewMongodb_arr[$flag['tag']];
}
else
{
$mongo=newNewMongodb($mongo_server);
$NewMongodb_arr[$flag['tag']]=$mongo;
return$mongo;
}
}
/**
*构造函数
*支持传入多个mongo_server(1.一个出问题时连接其它的server2.自动将查询均匀分发到不同server)
*
*参数:
*$mongo_server:数组或字符串-array("127.0.0.1:1111","127.0.0.1:2222")-"127.0.0.1:1111"
*$connect:初始化mongo对象时是否连接,默认连接
*$auto_balance:是否自动做负载均衡,默认是
*
*返回值:
*成功:mongoobject
*失败:false
*/
publicfunction__construct($mongo_server,$connect=true,$auto_balance=true)
{
if(is_array($mongo_server))
{
$mongo_server_num=count($mongo_server);
if($mongo_server_num>1&&$auto_balance)
{
$prior_server_num=rand(1,$mongo_server_num);
$rand_keys=array_rand($mongo_server,$mongo_server_num);
$mongo_server_str=$mongo_server[$prior_server_num-1];
foreach($rand_keysas$key)
{
if($key!=$prior_server_num-1)
{
$mongo_server_str.=','.$mongo_server[$key];
}
}
}
else
{
$mongo_server_str=implode(',',$mongo_server);
}}
else
{
$mongo_server_str=$mongo_server;
}
try{
$this->mongo=newMongoClient($mongo_server,array('connect'=>$connect));
}
catch(MongoConnectionException$e)
{
$this->error=$e->getMessage();
returnfalse;
}
}
/**
*连接NewMongodbserver
*
*参数:无
*
*返回值:
*成功:true
*失败:false
*/
publicfunctionconnect()
{
try{
$this->mongo->connect();
returntrue;
}
catch(MongoConnectionException$e)
{
$this->error=$e->getMessage();
returnfalse;
}
}
/**
*selectdb
*
*参数:$dbname
*
*返回值:无
*/
publicfunctionselectDb($dbname)
{
$this->curr_db_name=$dbname;
}
/**
*创建索引:如索引已存在,则返回。
*
*参数:
*$table_name:表名
*$index:索引-array("id"=>1)-在id字段建立升序索引
*$index_param:其它条件-是否唯一索引等
*
*返回值:
*成功:true
*失败:false
*/
publicfunctionensureIndex($table_name,$index,$index_param=array())
{
$dbname=$this->curr_db_name;
$index_param['safe']=1;
try{
$this->mongo->$dbname->$table_name->ensureIndex($index,$index_param);
returntrue;
}
catch(MongoCursorException$e)
{
$this->error=$e->getMessage();
returnfalse;
}
}
/**
*插入记录
*
*参数:
*$table_name:表名
*$record:记录
*
*返回值:
*成功:true
*失败:false
*/
publicfunctioninsert($table_name,$record)
{
$dbname=$this->curr_db_name;
try{
$this->mongo->$dbname->$table_name->insert($record,array('safe'=>true));
returntrue;
}
catch(MongoCursorException$e)
{
$this->error=$e->getMessage();
returnfalse;
}
}
/**
*查询表的记录数
*
*参数:
*$table_name:表名
*
*返回值:表的记录数
*/
publicfunctioncount($table_name)
{
$dbname=$this->curr_db_name;
return$this->mongo->$dbname->$table_name->count();
}
/**
*更新记录
*
*参数:
*$table_name:表名
*$condition:更新条件
*$newdata:新的数据记录
*$options:更新选择-upsert/multiple
*
*返回值:
*成功:true
*失败:false
*/
publicfunctionupdate($table_name,$condition,$newdata,$options=array())
{
$dbname=$this->curr_db_name;
$options['safe']=1;
if(!isset($options['multiple']))
{
$options['multiple']=0;}
try{
$this->mongo->$dbname->$table_name->update($condition,$newdata,$options);
returntrue;
}
catch(MongoCursorException$e)
{
$this->error=$e->getMessage();
returnfalse;
}
}
/**
*删除记录
*
*参数:
*$table_name:表名
*$condition:删除条件
*$options:删除选择-justOne
*
*返回值:
*成功:true
*失败:false
*/
publicfunctionremove($table_name,$condition,$options=array())
{
$dbname=$this->curr_db_name;
$options['safe']=1;
try{
$this->mongo->$dbname->$table_name->remove($condition,$options);
returntrue;
}
catch(MongoCursorException$e)
{
$this->error=$e->getMessage();
returnfalse;
}}
/**
*查找记录
*
*参数:
*$table_name:表名
*$query_condition:字段查找条件
*$result_condition:查询结果限制条件-limit/sort等
*$fields:获取字段
*
*返回值:
*成功:记录集
*失败:false
*/
publicfunctionfind($table_name,$query_condition,$result_condition=array(),$fields=array())
{
$dbname=$this->curr_db_name;
$cursor=$this->mongo->$dbname->$table_name->find($query_condition,$fields);
if(!empty($result_condition['start']))
{
$cursor->skip($result_condition['start']);
}
if(!empty($result_condition['limit']))
{
$cursor->limit($result_condition['limit']);
}
if(!empty($result_condition['sort']))
{
$cursor->sort($result_condition['sort']);
}
$result=array();
try{
while($cursor->hasNext())
{
$result[]=$cursor->getNext();
}
}
catch(MongoConnectionException$e)
{
$this->error=$e->getMessage();
returnfalse;
}
catch(MongoCursorTimeoutException$e)
{
$this->error=$e->getMessage();
returnfalse;
}
return$result;
}
/**
*查找一条记录
*
*参数:
*$table_name:表名
*$condition:查找条件
*$fields:获取字段
*
*返回值:
*成功:一条记录
*失败:false
*/
publicfunctionfindOne($table_name,$condition,$fields=array())
{
$dbname=$this->curr_db_name;
return$this->mongo->$dbname->$table_name->findOne($condition,$fields);
}
/**
*获取当前错误信息
*
*参数:无
*
*返回值:当前错误信息
*/
publicfunctiongetError()
{
return$this->error;
}
/***NewMongodb类**examples:
*$mongo=newNewMongodb("127.0.0.1:11223");
*$mongo->selectDb("test_db");
*创建索引
*$mongo->ensureIndex("test_table",array("id"=>1),array('unique'=>true));
*获取表的记录
*$mongo->count("test_table");
*插入记录
*$mongo->insert("test_table",array("id"=>2,"title"=>"asdqw"));
*更新记录
*$mongo->update("test_table",array("id"=>1),array("id"=>1,"title"=>"bbb"));
*更新记录-存在时更新,不存在时添加-相当于set
*$mongo->update("test_table",array("id"=>1),array("id"=>1,"title"=>"bbb"),array("upsert"=>1));
*查找记录
*$mongo->find("c",array("title"=>"asdqw"),array("start"=>2,"limit"=>2,"sort"=>array("id"=>1)))
*查找一条记录
*$mongo->findOne("$mongo->findOne("ttt",array("id"=>1))",array("id"=>1));
*删除记录
*$mongo->remove("ttt",array("title"=>"bbb"));
*仅删除一条记录
*$mongo->remove("ttt",array("title"=>"bbb"),array("justOne"=>1));
*获取Mongo操作的错误信息
*$mongo->getError();
*/
}