php实现的mongodb操作类实例
本文实例讲述了php实现的mongodb操作类。分享给大家供大家参考。具体如下:
<?php /* *Tochangethistemplate,chooseTools|Templates *andopenthetemplateintheeditor. */ classmongo_db{ private$config; private$connection; private$db; private$connection_string; private$host; private$port; private$user; private$pass; private$dbname; private$persist; private$persist_key; private$selects=array(); private$wheres=array(); private$sorts=array(); private$limit=999999; private$offset=0; private$timeout=200; private$key=0; /** * *CONSTRUCTOR* * *AutomaticallycheckiftheMongoPECLextensionhasbeen installed/enabled. *Generatetheconnectionstringandestablishaconnection totheMongoDB. */ publicfunction__construct(){ if((IS_NOSQL!=1)){ return; } if(!class_exists('Mongo')){ //$this->error("TheMongoDBPECLextensionhasnotbeeninstalledorenabled",500); } $configs=wxcity_base::load_config("cache","mongo_db"); $num=count($configs['connect']); $this->timeout=trim($configs['timeout']); $keys=wxcity_base::load_config('double'); $this->key=$keys['mongo_db']; $this->config=$configs['connect'][$this->key]; $status=$this->connect(); if($status==false) { for($i=1;$i<$num;$i++) { $n=$this->key+$i; $key=$n>=$num?$n-$num:$n; $this->config=$configs['connect'][$key]; $status=$this->connect(); if($status!=false) { $keys['mongo_db']=$key; $this->key=$key; $data="<?php\nreturn".var_export($keys,true).";\n?>"; file_put_contents(WHTY_PATH.'configs/double.php',$data,LOCK_EX); break; } } } if($status==false) { die('mongoDBnotconnect'); } } function__destruct(){ if((IS_NOSQL!=1)){ return; } if($this->connection) { $this->connection->close(); } } /** * *CONNECTTOMONGODB* * *EstablishaconnectiontoMongoDBusing theconnectionstringgeneratedin *theconnection_string()method. If'mongo_persist_key'wassettotrueinthe *configfile,establishapersistentconnection. Weallowforonlythe'persist' *optiontobesetbecausewewantto establishaconnectionimmediately. */ privatefunctionconnect(){ $this->connection_string(); $options=array('connect'=>true,'timeout'=>$this->timeout); try{ $this->connection=newMongo($this->connection_string,$options); $this->db=$this->connection->{$this->dbname}; return($this); }catch(MongoConnectionException$e){ returnfalse; } } /** * *BUILDCONNECTIONSTRING* * *Buildtheconnectionstringfromtheconfigfile. */ privatefunctionconnection_string(){ $this->host=trim($this->config['hostname']); $this->port=trim($this->config['port']); $this->user=trim($this->config['username']); $this->pass=trim($this->config['password']); $this->dbname=trim($this->config['database']); $this->persist=trim($this->config['autoconnect']); $this->persist_key=trim($this->config['mongo_persist_key']); $connection_string="mongodb://"; if(emptyempty($this->host)){ $this->error("TheHostmustbesettoconnecttoMongoDB",500); }if(emptyempty($this->dbname)){ $this->error("TheDatabasemustbesettoconnecttoMongoDB",500); }if(!emptyempty($this->user)&&!emptyempty($this->pass)){ $connection_string.="{$this->user}:{$this->pass}@"; }if(isset($this->port)&&!emptyempty($this->port)){ $connection_string.="{$this->host}:{$this->port}"; }else{ $connection_string.="{$this->host}"; }$this->connection_string=trim($connection_string); } /** * *Switch_db* * *Switchfromdefaultdatabasetoadifferentdb */ publicfunctionswitch_db($database=''){ if(emptyempty($database)){ $this->error("ToswitchMongoDBdatabases,anewdatabasenamemustbespecified",500); }$this->dbname=$database; try{ $this->db=$this->connection->{$this->dbname}; return(TRUE); }catch(Exception$e){ $this->error("UnabletoswitchMongoDatabases:{$e->getMessage()}",500); } } /** * *SELECTFIELDS* * *DeterminewhichfieldstoincludeORwhichto excludeduringthequeryprocess. *Currently,includingandexcludingat thesametimeisnotavailable,sothe *$includesarraywilltakeprecedenceover the$excludesarray. Ifyouwantto *onlychoosefieldstoexclude, leave$includesanemptyarray(). * *@usage:$this->mongo_db->select(array('foo','bar'))->get('foobar'); */ publicfunctionselect($includes=array(),$excludes=array()){ if(!is_array($includes)){ $includes=array(); } if(!is_array($excludes)){ $excludes=array(); } if(!emptyempty($includes)){ foreach($includesas$col){ $this->selects[$col]=1; } }else{ foreach($excludesas$col){ $this->selects[$col]=0; } }return($this); } /** * *WHEREPARAMETERS* * *Getthedocumentsbasedonthese searchparameters.The$wheresarrayshould *beanassociativearraywiththefield asthekeyandthevalueasthesearch *criteria.* *@usage=$this->mongo_db->where(array('foo'=>'bar'))->get('foobar'); */ publicfunctionwhere($wheres=array()){ foreach((array)$wheresas$wh=>$val){ $this->wheres[$wh]=$val; }return($this); } /** * *WHERE_INPARAMETERS* * *Getthedocumentswherethevalue ofa$fieldisinagiven$inarray(). * *@usage=$this->mongo_db->where_in('foo',array('bar','zoo','blah'))->get('foobar'); */ publicfunctionwhere_in($field="",$in=array()){ $this->where_init($field); $this->wheres[$field]['$in']=$in; return($this); } /** * *WHERE_NOT_INPARAMETERS* * *Getthedocumentswherethevalueof a$fieldisnotinagiven$inarray(). * *@usage=$this->mongo_db->where_not_in('foo',array('bar','zoo','blah'))->get('foobar'); */ publicfunctionwhere_not_in($field="",$in=array()){ $this->where_init($field); $this->wheres[$field]['$nin']=$in; return($this); } /** * *WHEREGREATERTHANPARAMETERS* * *Getthedocumentswherethevalueof a$fieldisgreaterthan$x * *@usage=$this->mongo_db->where_gt('foo',20); */ publicfunctionwhere_gt($field="",$x){ $this->where_init($field); $this->wheres[$field]['$gt']=$x; return($this); } /** * *WHEREGREATERTHANOREQUALTOPARAMETERS* * *Getthedocumentswherethevalueofa$fieldisgreaterthanorequalto$x * *@usage=$this->mongo_db->where_gte('foo',20); */ publicfunctionwhere_gte($field="",$x){ $this->where_init($field); $this->wheres[$field]['$gte']=$x; return($this); } /** * *WHERELESSTHANPARAMETERS* * *Getthedocumentswherethevalueof a$fieldislessthan$x * *@usage=$this->mongo_db->where_lt('foo',20); */ publicfunctionwhere_lt($field="",$x){ $this->where_init($field); $this->wheres[$field]['$lt']=$x; return($this); } /** * *WHERELESSTHANOREQUALTOPARAMETERS* * *Getthedocumentswherethevalueof a$fieldislessthanorequalto$x * *@usage=$this->mongo_db->where_lte('foo',20); */ publicfunctionwhere_lte($field="",$x){ $this->where_init($field); $this->wheres[$field]['$lte']=$x; return($this); } /** * *WHEREBETWEENPARAMETERS* * *Getthedocumentswherethevalueof a$fieldisbetween$xand$y * *@usage=$this->mongo_db->where_between('foo',20,30); */ publicfunctionwhere_between($field="",$x,$y){ $this->where_init($field); $this->wheres[$field]['$gte']=$x; $this->wheres[$field]['$lte']=$y; return($this); } /** * *WHEREBETWEENANDNOTEQUALTOPARAMETERS* * *Getthedocumentswherethevalueof a$fieldisbetweenbutnotequalto$xand$y * *@usage=$this->mongo_db->where_between_ne('foo',20,30); */ publicfunctionwhere_between_ne($field="",$x,$y){ $this->where_init($field); $this->wheres[$field]['$gt']=$x; $this->wheres[$field]['$lt']=$y; return($this); } /** * *WHERENOTEQUALTOPARAMETERS* * *Getthedocumentswherethevalueof a$fieldisnotequalto$x * *@usage=$this->mongo_db->where_between('foo',20,30); */ publicfunctionwhere_ne($field="",$x){ $this->where_init($field); $this->wheres[$field]['$ne']=$x; return($this); } /** * *WHEREOR* * *Getthedocumentswherethevalueof a$fieldisinoneormorevalues * *@usage=$this->mongo_db->where_or('foo',array('foo','bar','blegh'); */ publicfunctionwhere_or($field="",$values){ $this->where_init($field); $this->wheres[$field]['$or']=$values; return($this); } /** * *WHEREAND* * *Getthedocumentswheretheelementsmatch thespecifiedvalues* *@usage=$this->mongo_db->where_and(array('foo'=>1,'b'=>'someexample'); */ publicfunctionwhere_and($elements_values=array()){ foreach((array)$elements_valuesas$element=>$val){ $this->wheres[$element]=$val; }return($this); } /** * *WHEREMOD* * *Getthedocumentswhere$field%$mod=$result* *@usage=$this->mongo_db->where_mod('foo',10,1); */ publicfunctionwhere_mod($field,$num,$result){ $this->where_init($field); $this->wheres[$field]['$mod']=array($num,$result); return($this); } /****Wheresize***Getthedocumentswherethesizeofafieldisinagiven$sizeint**@usage:$this->mongo_db->where_size('foo',1)->get('foobar');*/ publicfunctionwhere_size($field="",$size=""){ $this->_where_init($field); $this->wheres[$field]['$size']=$size; return($this); } /** * *LIKEPARAMETERS* * *Getthedocumentswherethe(string)valueof a$fieldislikeavalue.Thedefaults *allowforacase-insensitivesearch.* *@param$flags *Allowsforthetypicalregularexpressionflags: *i=caseinsensitive *m=multiline *x=cancontaincomments *l=locale *s=dotall,"."matcheseverything,includingnewlines *u=matchunicode * *@param$enable_start_wildcard *IfsettoanythingotherthanTRUE,astartinglinecharacter"^"willbeprepended *tothesearchvalue,representingonlysearchingforavalueatthestartof *anewline. **@param$enable_end_wildcard *IfsettoanythingotherthanTRUE,anendinglinecharacter"$"willbeappended *tothesearchvalue,representingonlysearchingforavalueattheendof *aline. * *@usage=$this->mongo_db->like('foo','bar','im',FALSE,TRUE); */ publicfunctionlike($field="",$value="",$flags="i",$enable_start_wildcard=TRUE,$enable_end_wildcard=TRUE){ $field=(string)trim($field); $this->where_init($field); $value=(string)trim($value); $value=quotemeta($value); if($enable_start_wildcard!==TRUE){ $value="^".$value; }if($enable_end_wildcard!==TRUE){ $value.="$"; }$regex="/$value/$flags"; $this->wheres[$field]=newMongoRegex($regex); return($this); } publicfunctionwheres($where){ $this->wheres=$where; } /** * *ORDERBYPARAMETERS* * *Sortthedocumentsbasedontheparameterspassed. Tosetvaluestodescendingorder, *youmustpassvaluesofeither-1,FALSE, 'desc',or'DESC',elsetheywillbe *setto1(ASC). * *@usage=$this->mongo_db->where_between('foo',20,30); */ publicfunctionorder_by($fields=array()){ if(!is_array($fields)||!count($fields))return; foreach($fieldsas$col=>$val){ if($val==-1||$val===FALSE||strtolower($val)=='desc'){ $this->sorts[$col]=-1; }else{ $this->sorts[$col]=1; } }return($this); } /** * *LIMITDOCUMENTS* * *Limittheresultsetto$xnumberofdocuments* *@usage=$this->mongo_db->limit($x); */ publicfunctionlimit($x=99999){ if($x!==NULL&&is_numeric($x)&&$x>=1){ $this->limit=(int)$x; }return($this); } /** * *OFFSETDOCUMENTS* * *Offsettheresultsettoskip$xnumberofdocuments * *@usage=$this->mongo_db->offset($x); */ publicfunctionoffset($x=0){ if($x!==NULL&&is_numeric($x)&&$x>=1){ $this->offset=(int)$x; }return($this); } /** * *GET_WHERE* * *Getthedocumentsbaseduponthepassedparameters* *@usage=$this->mongo_db->get_where('foo',array('bar'=>'something')); */ publicfunctionget_where($collection="",$where=array(),$limit=99999,$orderby=array()){ if(is_array($orderby)||!emptyempty($orderby)){ $order_by=$this->order_by($order_by); } return($this->where($where)->limit($limit)->get($collection)); } publicfunctionselectA($collection="",$limit=99999,$orderby=array()){ if(intval($limit)<1){ $limit=999999; } $order_by=$this->order_by($orderby); $re=$this->limit($limit)->get($collection); $this->clear(); return(array)$re; } publicfunctionlistinfo($collection="",$orderby=array(),$page=1,$pagesize=12){ $page=max(intval($page),1); $offset=$pagesize*($page-1); $pagesizes=$offset+$pagesize; $this->offset($offset); $order_by=$this->order_by($orderby); $re=$this->limit($pagesize)->get($collection); $this->limit(999999); $count=$this->count($collection); $this->pages=pages($count,$page,$pagesize); return(array)$re; } /** * *GET* * *Getthedocumentsbaseduponthepassedparameters* *@usage=$this->mongo_db->get('foo',array('bar'=>'something')); */ publicfunctionget($collection=""){ if(emptyempty($collection)){ $this->error("InordertoretreivedocumentsfromMongoDB,acollectionnamemustbepassed",500); }$results=array(); $documents=$this->db->{$collection}->find($this->wheres,$this->selects)->limit((int)$this->limit)->skip((int)$this->offset)->sort($this->sorts); $returns=array(); foreach($documentsas$doc):$returns[]=$doc; endforeach; return($returns); } publicfunctiongetMy($collection=""){ if(emptyempty($collection)){ $this->error("InordertoretreivedocumentsfromMongoDB,acollectionnamemustbepassed",500); }$results=array(); $documents=$this->db->{$collection}->find($this->wheres,$this->selects)->limit((int)$this->limit)->skip((int)$this->offset)->sort($this->sorts); $returns=array(); foreach($documentsas$doc):$returns[]=$doc; endforeach; $this->clear(); return($returns); } /** * *COUNT* * *Countthedocumentsbaseduponthepassedparameters* *@usage=$this->mongo_db->get('foo'); */ publicfunctioncount($collection=""){ if(emptyempty($collection)){ $this->error("InordertoretreiveacountofdocumentsfromMongoDB,acollectionnamemustbepassed",500); }$count=$this->db->{$collection}->find($this->wheres)->limit((int)$this->limit)->skip((int)$this->offset)->count(); $this->clear(); return($count); } /** * *INSERT* * *Insertanewdocumentintothepassedcollection* *@usage=$this->mongo_db->insert('foo',$data=array()); */ publicfunctioninsert($collection="",$data=array(),$name='ID'){ if(emptyempty($collection)){ $this->error("NoMongocollectionselectedtoinsertinto",500); }if(count($data)==0||!is_array($data)){ $this->error("NothingtoinsertintoMongocollectionorinsertisnotanarray",500); }try{ /** wxcity_base::load_sys_class('whtysqs','',0); $mongoseq_class=newwhtysqs('creaseidsqs'); $re=$mongoseq_class->query("?name=".$collection."&opt=put&data=1"); **/ $re=put_sqs('list_mongo_creaseidsqs','1'); if(is_numeric($re)){ $re++; $data[$name]=intval($re); }else{ $data[$name]=intval(time()); //die('mongosqserror'); } $this->db->{$collection}->insert($data,array('fsync'=>TRUE)); $this->clear(); return$data[$name]; }catch(MongoCursorException$e){ $this->error("InsertofdataintoMongoDBfailed:{$e->getMessage()}",500); } } publicfunctioninsertWithId($collection="",$data=array()){ if(emptyempty($collection)){ $this->error("NoMongocollectionselectedtoinsertinto",500); }if(count($data)==0||!is_array($data)){ $this->error("NothingtoinsertintoMongocollectionorinsertisnotanarray",500); }try{ $this->db->{$collection}->insert($data,array('fsync'=>TRUE)); $this->clear(); return1; }catch(MongoCursorException$e){ $this->error("InsertofdataintoMongoDBfailed:{$e->getMessage()}",500); } } /** * *UPDATE* * *Updateadocumentintothepassedcollection* *@usage=$this->mongo_db->update('foo',$data=array()); */ publicfunctionupdate($collection="",$data=array()){ if(emptyempty($collection)){ $this->error("NoMongocollectionselectedtoupdate",500); }if(count($data)==0||!is_array($data)){ $this->error("NothingtoupdateinMongocollectionorupdateisnotanarray",500); }try{ $this->db->{$collection}->update($this->wheres,array('$set'=>$data),array('fsync'=>TRUE,'multiple'=>FALSE)); $this->clear(); return(TRUE); }catch(MongoCursorException$e){ $this->error("UpdateofdataintoMongoDBfailed:{$e->getMessage()}",500); } } /** * *UPDATE_ALL* * *Insertanewdocumentintothepassedcollection* *@usage=$this->mongo_db->update_all('foo',$data=array()); */ publicfunctionupdate_all($collection="",$data=array()){ if(emptyempty($collection)){ $this->error("NoMongocollectionselectedtoupdate",500); }if(count($data)==0||!is_array($data)){ $this->error("NothingtoupdateinMongocollectionorupdateisnotanarray",500); }try{ $this->db->{$collection}->update($this->wheres,array('$set'=>$data),array('fsync'=>TRUE,'multiple'=>TRUE)); return(TRUE); }catch(MongoCursorException$e){ $this->error("UpdateofdataintoMongoDBfailed:{$e->getMessage()}",500); } } /** * *DELETE* * *deletedocumentfromthepassedcollectionbaseduponcertaincriteria* *@usage=$this->mongo_db->delete('foo',$data=array()); */ publicfunctiondelete($collection=""){ if(emptyempty($collection)){ $this->error("NoMongocollectionselectedtodeletefrom",500); }try{ $this->db->{$collection}->remove($this->wheres,array('fsync'=>TRUE,'justOne'=>TRUE)); $this->clear(); return(TRUE); }catch(MongoCursorException$e){ $this->error("DeleteofdataintoMongoDBfailed:{$e->getMessage()}",500); } } /** * *DELETE_ALL* * *Deletealldocumentsfromthepassedcollectionbaseduponcertaincriteria * *@usage=$this->mongo_db->delete_all('foo',$data=array()); */ publicfunctiondelete_all($collection=""){ if(emptyempty($collection)){ $this->error("NoMongocollectionselectedtodeletefrom",500); }try{ $this->db->{$collection}->remove($this->wheres,array('fsync'=>TRUE,'justOne'=>FALSE)); return(TRUE); }catch(MongoCursorException$e){ $this->error("DeleteofdataintoMongoDBfailed:{$e->getMessage()}",500); } } /** * *ADD_INDEX* * *Ensureanindexofthekeysinacollectionwithoptionalparameters. Tosetvaluestodescendingorder, *youmustpassvaluesofeither-1,FALSE,'desc',or'DESC',elsetheywillbe *setto1(ASC).* *@usage=$this->mongo_db->add_index($collection,array('first_name'=>'ASC','last_name'=>-1),array('unique'=>TRUE)); */ publicfunctionadd_index($collection="",$keys=array(),$options=array()){ if(emptyempty($collection)){ $this->error("NoMongocollectionspecifiedtoaddindexto",500); }if(emptyempty($keys)||!is_array($keys)){ $this->error("IndexcouldnotbecreatedtoMongoDBCollectionbecausenokeyswerespecified",500); }foreach($keysas$col=>$val){ if($val==-1||$val===FALSE||strtolower($val)=='desc'){ $keys[$col]=-1; }else{ $keys[$col]=1; } }if($this->db->{$collection}->ensureIndex($keys,$options)==TRUE){ $this->clear(); return($this); }else{ $this->error("AnerroroccuredwhentryingtoaddanindextoMongoDBCollection",500); } } /** * *REMOVE_INDEX* * *Removeanindexofthekeysinacollection. Tosetvaluestodescendingorder, *youmustpassvaluesofeither-1,FALSE,'desc',or'DESC',elsetheywillbe *setto1(ASC).* *@usage=$this->mongo_db->remove_index($collection,array('first_name'=>'ASC','last_name'=>-1)); */ publicfunctionremove_index($collection="",$keys=array()){ if(emptyempty($collection)){ $this->error("NoMongocollectionspecifiedtoremoveindexfrom",500); }if(emptyempty($keys)||!is_array($keys)){ $this->error("IndexcouldnotberemovedfromMongoDBCollectionbecausenokeyswerespecified",500); }if($this->db->{$collection}->deleteIndex($keys,$options)==TRUE){ $this->clear(); return($this); }else{ $this->error("AnerroroccuredwhentryingtoremoveanindexfromMongoDBCollection",500); } } /** * *REMOVE_ALL_INDEXES* * *Removeallindexesfromacollection.* *@usage=$this->mongo_db->remove_all_index($collection); */ publicfunctionremove_all_indexes($collection=""){ if(emptyempty($collection)){ $this->error("NoMongocollectionspecifiedtoremoveallindexesfrom",500); }$this->db->{$collection}->deleteIndexes(); $this->clear(); return($this); } /** * *LIST_INDEXES* * *Listsallindexesinacollection.* *@usage=$this->mongo_db->list_indexes($collection); */ publicfunctionlist_indexes($collection=""){ if(emptyempty($collection)){ $this->error("NoMongocollectionspecifiedtoremoveallindexesfrom",500); }return($this->db->{$collection}->getIndexInfo()); } /** * *DROPCOLLECTION* * *Removesthespecifiedcollectionfromthedatabase. Becarefulbecausethis *canhavesomeverylargeissuesinproduction! */ publicfunctiondrop_collection($collection=""){ if(emptyempty($collection)){ $this->error("NoMongocollectionspecifiedtodropfromdatabase",500); }$this->db->{$collection}->drop(); returnTRUE; } /** * *CLEAR* * *Resetstheclassvariablestodefaultsettings */ privatefunctionclear(){ $this->selects=array(); $this->wheres=array(); $this->limit=NULL; $this->offset=NULL; $this->sorts=array(); } /** * *WHEREINITIALIZER* * *Preparesparametersforinsertionin$wheresarray(). */ privatefunctionwhere_init($param){ if(!isset($this->wheres[$param])){ $this->wheres[$param]=array(); } } publicfunctionerror($str,$t){ echo$str; exit; } } ?>
使用范例:
$table_name=trim(strtolower($this->table_name)); $this->mongo_db->where($where); $order=!emptyempty($order)?array('AID'=>'DESC'):array('AID'=>'ASC'); //升序降序 $infos=$this->mongo_db->listinfo($table_name,$order,$page,$pagesize);
希望本文所述对大家的php程序设计有所帮助。