MongoDB PHP数据库查询类
生活随笔
收集整理的這篇文章主要介紹了
MongoDB PHP数据库查询类
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Java代碼?? <?php???? /***?Mongodb類**?examples:???? *?$mongo?=?new?HMongodb("127.0.0.1:11223");?? *?$mongo->selectDb("test_db");?? *?創(chuàng)建索引?? *?$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();?? */???? ???? class?HMongodb?{???? ???? ????//Mongodb連接???? ????var?$mongo;???? ???? ????var?$curr_db_name;???? ????var?$curr_table_name;???? ????var?$error;???? ???? ????/**?? ????*?構造函數(shù)?? ????*?支持傳入多個mongo_server(1.一個出問題時連接其它的server?2.自動將查詢均勻分發(fā)到不同server)?? ????*?? ????*?參數(shù):?? ????*?$mongo_server:數(shù)組或字符串-array("127.0.0.1:1111",?"127.0.0.1:2222")-"127.0.0.1:1111"?? ????*?$connect:初始化mongo對象時是否連接,默認連接?? ????*?$auto_balance:是否自動做負載均衡,默認是?? ????*?? ????*?返回值:?? ????*?成功:mongo?object?? ????*?失敗:false?? ????*/???? ????function?__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_keys?as?$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?=?new?Mongo($mongo_server,?array('connect'=>$connect));???? ????????}???? ????????catch?(MongoConnectionException?$e)???? ????????{???? ????????????$this->error?=?$e->getMessage();???? ????????????return?false;???? ????????}???? ????}???? ???? ????function?getInstance($mongo_server,?$flag=array())???? ????{???? ????????static?$mongodb_arr;???? ????????if?(emptyempty($flag['tag']))???? ????????{???? ????????????$flag['tag']?=?'default';??????????}???? ????????if?(isset($flag['force'])?&&?$flag['force']?==?true)???? ????????{???? ????????????$mongo?=?new?HMongodb($mongo_server);???? ????????????if?(emptyempty($mongodb_arr[$flag['tag']]))???? ????????????{???? ????????????????$mongodb_arr[$flag['tag']]?=?$mongo;???? ????????????}???? ????????????return?$mongo;???? ????????}???? ????????else?if?(isset($mongodb_arr[$flag['tag']])?&&?is_resource($mongodb_arr[$flag['tag']]))???? ????????{???? ????????????return?$mongodb_arr[$flag['tag']];???? ????????}???? ????????else???? ????????{???? ????????????$mongo?=?new?HMongodb($mongo_server);???? ????????????$mongodb_arr[$flag['tag']]?=?$mongo;???? ????????????return?$mongo;??????????????????}??????????}???? ???? ????/**?? ????*?連接mongodb?server?? ????*?? ????*?參數(shù):無?? ????*?? ????*?返回值:?? ????*?成功:true?? ????*?失敗:false?? ????*/???? ????function?connect()???? ????{???? ????????try?{???? ????????????$this->mongo->connect();???? ????????????return?true;???? ????????}???? ????????catch?(MongoConnectionException?$e)???? ????????{???? ????????????$this->error?=?$e->getMessage();???? ????????????return?false;???? ????????}???? ????}???? ???? ????/**?? ????*?select?db?? ????*?? ????*?參數(shù):$dbname?? ????*?? ????*?返回值:無?? ????*/???? ????function?selectDb($dbname)???? ????{???? ????????$this->curr_db_name?=?$dbname;???? ????}???? ???? ????/**?? ????*?創(chuàng)建索引:如索引已存在,則返回。?? ????*?? ????*?參數(shù):?? ????*?$table_name:表名?? ????*?$index:索引-array("id"=>1)-在id字段建立升序索引?? ????*?$index_param:其它條件-是否唯一索引等?? ????*?? ????*?返回值:?? ????*?成功:true?? ????*?失敗:false?? ????*/???? ????function?ensureIndex($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);???? ????????????return?true;???? ????????}???? ????????catch?(MongoCursorException?$e)???? ????????{???? ????????????$this->error?=?$e->getMessage();???? ????????????return?false;???? ????????}???? ????}???? ???? ????/**?? ????*?插入記錄?? ????*?? ????*?參數(shù):?? ????*?$table_name:表名?? ????*?$record:記錄?? ????*?? ????*?返回值:?? ????*?成功:true?? ????*?失敗:false?? ????*/???? ????function?insert($table_name,?$record)???? ????{???? ????????$dbname?=?$this->curr_db_name;???? ????????try?{???? ????????????$this->mongo->$dbname->$table_name->insert($record,?array('safe'=>true));???? ????????????return?true;???? ????????}???? ????????catch?(MongoCursorException?$e)???? ????????{???? ????????????$this->error?=?$e->getMessage();???? ????????????return?false;???? ????????}???? ????}???? ???? ????/**?? ????*?查詢表的記錄數(shù)?? ????*?? ????*?參數(shù):?? ????*?$table_name:表名?? ????*?? ????*?返回值:表的記錄數(shù)?? ????*/???? ????function?count($table_name)???? ????{???? ????????$dbname?=?$this->curr_db_name;???? ????????return?$this->mongo->$dbname->$table_name->count();???? ????}???? ???? ????/**?? ????*?更新記錄?? ????*?? ????*?參數(shù):?? ????*?$table_name:表名?? ????*?$condition:更新條件?? ????*?$newdata:新的數(shù)據(jù)記錄?? ????*?$options:更新選擇-upsert/multiple?? ????*?? ????*?返回值:?? ????*?成功:true?? ????*?失敗:false?? ????*/???? ????function?update($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);???? ????????????return?true;???? ????????}???? ????????catch?(MongoCursorException?$e)???? ????????{???? ????????????$this->error?=?$e->getMessage();???? ????????????return?false;???? ????????}??????????}???? ???? ????/**?? ????*?刪除記錄?? ????*?? ????*?參數(shù):?? ????*?$table_name:表名?? ????*?$condition:刪除條件?? ????*?$options:刪除選擇-justOne?? ????*?? ????*?返回值:?? ????*?成功:true?? ????*?失敗:false?? ????*/???? ????function?remove($table_name,?$condition,?$options=array())???? ????{???? ????????$dbname?=?$this->curr_db_name;???? ????????$options['safe']?=?1;???? ????????try?{???? ????????????$this->mongo->$dbname->$table_name->remove($condition,?$options);???? ????????????return?true;???? ????????}???? ????????catch?(MongoCursorException?$e)???? ????????{???? ????????????$this->error?=?$e->getMessage();???? ????????????return?false;???? ????????}??????????}???? ???? ????/**?? ????*?查找記錄?? ????*?? ????*?參數(shù):?? ????*?$table_name:表名?? ????*?$query_condition:字段查找條件?? ????*?$result_condition:查詢結果限制條件-limit/sort等?? ????*?$fields:獲取字段?? ????*?? ????*?返回值:?? ????*?成功:記錄集?? ????*?失敗:false?? ????*/???? ????function?find($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?(!emptyempty($result_condition['start']))???? ????????{???? ????????????$cursor->skip($result_condition['start']);???? ????????}???? ????????if?(!emptyempty($result_condition['limit']))???? ????????{???? ????????????$cursor->limit($result_condition['limit']);???? ????????}???? ????????if?(!emptyempty($result_condition['sort']))???? ????????{???? ????????????$cursor->sort($result_condition['sort']);???? ????????}???? ????????$result?=?array();???? ????????try?{???? ????????????while?($cursor->hasNext())???? ????????????{???? ????????????????$result[]?=?$cursor->getNext();???? ????????????}???? ????????}???? ????????catch?(MongoConnectionException?$e)???? ????????{???? ????????????$this->error?=?$e->getMessage();???? ????????????return?false;???? ????????}???? ????????catch?(MongoCursorTimeoutException?$e)???? ????????{???? ????????????$this->error?=?$e->getMessage();???? ????????????return?false;???? ????????}???? ????????return?$result;???? ????}???? ???? ????/**?? ????*?查找一條記錄?? ????*?? ????*?參數(shù):?? ????*?$table_name:表名?? ????*?$condition:查找條件?? ????*?$fields:獲取字段?? ????*?? ????*?返回值:?? ????*?成功:一條記錄?? ????*?失敗:false?? ????*/???? ????function?findOne($table_name,?$condition,?$fields=array())???? ????{???? ????????$dbname?=?$this->curr_db_name;???? ????????return?$this->mongo->$dbname->$table_name->findOne($condition,?$fields);???? ????}???? ???? ????/**?? ????*?獲取當前錯誤信息?? ????*?? ????*?參數(shù):無?? ????*?? ????*?返回值:當前錯誤信息?? ????*/???? ????function?getError()???? ????{???? ????????return?$this->error;???? ????}???? }???? ???? ?>?? //⑴默認格式?? $m?=?new?Mongo();?? //這里采用默認連接本機的27017端口,當然你也可以連接遠程主機如192.168.0.4:27017,如果端口是27017,端口可以省略?? //⑵標準連接?? $m?=?new?Mongo("mongodb://${username}:${password}@localhost");??? $mo?=?new?Mongo();?? $coll?=?$mo->selectCollection('db',?'mycoll');//得到一個collection對象?? $coll?=?$mo->db->foo;?? $a?=?array('a'?=>?'b');?? $options?=?array('safe'?=>?true);?? $rs?=?$coll->insert($a,?$options);?? $coll?=?$mo->db->coll;?? $c?=?array('a'?=>?1,?'s'?=>?array('$lt'?=>?100));?? $newobj?=?array('e'?=>?'f',?'x'?=>?'y');?? $options?=?array('safe'?=>?true,?'multiple'?=>?true);?? $rs?=?$coll->update($c,?$newobj,?$options);?? $coll?=?$mo->db->coll;?? $c?=?array('a'?=>?1,?'s'?=>?array('$lt'?=>?100));?? $options?=?array('safe'?=>?true);?? $rs?=?$coll->remove($c,?$options);?? $coll?=?$mo->db->coll;?? $query?=?array('s'?=>?array('$lt'?=>?100));?? $fields?=?array('a'?=>?true,?'b'?=>?true);?? $rs?=?$coll->find($query,?$fields);?? $coll?=?$mo->db->coll;?? $query?=?array('s'?=>?array('$lt'?=>?100));?? $fields?=?array('a'?=>?true,?'b'?=>?true);?? $rs?=?$coll->findOne($query,?$fields);?? $cursor?=?$coll->find($query,$fields);?? while($cursor->hasNext()){?? $r?=?$cursor->getNext();?? ????var_dump($r);?? }?? //或者?? $cursor?=?$coll->find($query,$fields);?? foreache($cursor?as?$k=>$v){?? ????var_dump($v);?? }?? //或者?? $cursor?=?$coll->find($query,$fields);?? $array=?iterator_to_array($cursor);?? $m?->?dropDB("comedy");?? $db?=?$mo->dbname;?? $db->drop();?? $m->listDBs();???//無返回值?? $db?=?$mo->dbname;?? $db->_tostring(); ?
數(shù)據(jù)庫連接
Java代碼??選擇想要的collection:
Java代碼??插入數(shù)據(jù)(MongoCollection對象)
Java代碼??更新數(shù)據(jù)庫中的記錄(MongoCollection對象)
Java代碼??刪除數(shù)據(jù)庫中的記錄(MongoCollection對象)
Java代碼??查詢collection獲得多條記錄(MongoCollection類)
Java代碼???查詢collection獲得單條記錄(MongoCollection類)
Java代碼??針對游標對象MongoCursor的操作(MongoCursor類):
Java代碼??刪除一個數(shù)據(jù)庫
Java代碼??刪除當前DB
Java代碼??列出所有可用數(shù)據(jù)庫
Java代碼??獲得當前數(shù)據(jù)庫名
Java代碼??總結
以上是生活随笔為你收集整理的MongoDB PHP数据库查询类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 同一个局域网,不同网段的远程控制
- 下一篇: 自己动手搭建Nginx+memcache