public function initInstance($uri,$db,$collectionName){// $config = $this->getMongoConfig();// $tempStr='mongodb://'.$config['username'].':'.$config['password'].'@'.$config['host'].'/'.$config['db'];// $mongodbclient=new MongoDBClient();$this->setClient($uri);$this->setDatabase($db);$this->setCollection($collectionName);}
publicfunctionfilterConstructor($key,$operator,$value,$connector=array()){$filter=array();$subfilter=array();switch ($operator) {case'=':$subfilter=array($key=>$value);break;case'>':$subfilter=array($key=>array('$gt'=>$value));break;case'>=':$subfilter=array($key=>array('$gte'=>$value));break;case'<':$subfilter=array($key=>array('$lt'=>$value));break;case'<=':$subfilter=array($key=>array('$lte'=>$value));break;case'!=':$subfilter=array($key=>array('$ne'=>$value));break;default:die();break;}$filter=array_merge($filter,$subfilter);return$filter;}/** construct a easy-and filter with double arrays via key-value input* @param (Array)$trible1 (Array)$trible2* @return an array of mongo-dialect filter* @author wangyang*/publicfunctionandFilterConstructor($trible1,$trible2){$ret1=$this->filterConstructor($trible1[0],$trible1[1],$trible1[2]);$ret2=$this->filterConstructor($trible2[0],$trible2[1],$trible2[2]);array_merge($ret1,$ret2);return$ret1;}/** construct a easy-or filter with double arrays via key-value input* @param (Array)$trible1 (Array)$trible2* @return an array of mongo-dialect filter* @author wangyang*/publicfunctionorFilterConstructor($trible1,$trible2){$ret1=$this->filterConstructor($trible1[0],$trible1[1],$trible1[2]);$ret2=$this->filterConstructor($trible2[0],$trible2[1],$trible2[2]);$ret=array('$or'=>array());array_push($ret['$or'],$ret1);array_push($ret['$or'],$ret2);return$ret;}/** construct a easy-and filter with double filters* @param (Array)$query1 (Array)$query2* @return an array of mongo-dialect filter* @author wangyang*/publicfunctiononlyAndFilterConstructor($query1,$query2){$query1=array_merge_recursive($query1,$query2);return$query1;}/** construct a easy-or filter with double filters* @param (Array)$query1 (Array)$query2* @return an array of mongo-dialect filter* @author wangyang*/publicfunctiononlyOrFilterConstructor($query1,$query2){$query=array('$or'=>array());array_push($query['$or'],$query1);array_push($query['$or'],$query2);return$query;}/** resolve the complicated connectors set filter* @param (Array)$query e.g. array(filterarray1(),$connector,filterarray2()) * e.g. array(arr1(),'or','(',arr2(),'and',arr3(),')')* @return an array of mongo-dialect filter* @author wangyang*/publicfunctionqueryFilterConstructor($query){$priority=array('('=>3,'and'=>2,'or'=>2,')'=>1);$stack1=array();$stack2=array();//transfer nifix expression to postfix expressionforeach ($queryas$key => $value) {if(is_array($value)){array_push($stack2,$value);}elseif($value=='('||empty($stack1)){array_push($stack1,$value);}elseif($value==')') {while(($top=array_pop($stack1))!=='('){array_push($stack2,$top);}}elseif(end($stack1)=='('){array_push($stack1,$value);}else{while($priority[$value]<$priority[end($stack1)]){$top=array_pop($stack1);array_push($stack2,$top);}array_push($stack1,$value);} }while(!empty($stack1)){$top=array_pop($stack1);array_push($stack2,$top);}foreach ($stack2as$key => $value) {if(is_array($value)){$stack2[$key]=$this->filterConstructor($value[0],$value[1],$value[2]);}}//compute the postfix expressionforeach ($stack2as$key => $value) {if(is_array($value)){array_push($stack1,$value);}else{$top=array_pop($stack1);$subtop=array_pop($stack1);if($value=='and'){$ret=$this->onlyAndFilterConstructor($top,$subtop);array_push($stack1,$ret);}elseif($value=='or'){$ret=$this->onlyOrFilterConstructor($top,$subtop);array_push($stack1,$ret);}else{die('undefined connector');}}}$ret=array_pop($stack1);return$ret;}
require'MongodbExtension.php';
$mongo=new MongoDBClient();
$mongo->setClient("mongodb://127.0.0.1:27017");function DataBase($mongo){//列出所有數據庫名$databases=$mongo->listDatabases();//創建數據庫,獲得數據庫實例$database=$mongo->createDatabase('BUPT');//刪除數據庫$mongo->dropDatabase('BUPT');//選擇數據庫,獲得數據庫實例$database=$mongo->selectDatabase('wangyang');}
function Collection($mongo){//列出所有集合$collections=$mongo->listCollections();//創建集合,獲得集合實例$collection=$mongo->createCollection('BUPT');//刪除集合$mongo->dropCollection('BUPT');//選擇集合,獲得集合實例$collection=$mongo->selectCollection('test');}
function DocumentInsert($mongo){//插入一條數據$insert=array('name'=>'BUPT');$mongo->collectionInsertOne($insert);//插入多條數據$inserts=array(array('name'=>'BUPT'),array('by'=>'wangyang'));$mongo->collectionInsertMany($inserts);}
function DocumentDelete($mongo){//簡單的過濾器設置$filter=$mongo->filterConstructor('name','=','BUPT');//復雜的過濾器$filter=$mongo->queryFilterConstructor(array(array('by','=','me'),'or',array('title','=','BUPT')));//刪除很多條,返回刪了多少條$deletenum=$mongo->collectionDeleteMany($filter);//刪除一條$mongo->collectionDeleteOne($filter);}
function DocumentUpdate($mongo){//簡單的過濾器設置$filter=$mongo->filterConstructor('name','=','BUPT');//復雜的過濾器$filter=$mongo->queryFilterConstructor(array(array('by','=','me'),'or',array('title','=','BUPT')));//更新后的鍵值對$update=$mongo->updateConstructor('title','THU');//更新一條$mongo->collectionUpdateOne($filter,$update);//更新很多條$mongo->collectionUpdateMany($filter,$update);}
function DocumentFind($mongo){//簡單的過濾器設置$filter=$mongo->filterConstructor('name','=','BUPT');//復雜的過濾器$filter=$mongo->queryFilterConstructor(array(array('by','=','me'),'or',array('title','=','BUPT')));//選項,目前只提供limit和sort設置,可為空$option=$mongo->optionConstructor(4,array('key'=>'_id','value'=>'-1'));//查找一條,返回一條數據實例$document=$mongo->collectionFindOne($filter,$option);//查找許多條,返回數據實例數組$documents=$mongo->collectionFindMany($filter,$option);}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
4.異常處理 全程try catch,進入一個異常處理函數,詳情如下
publicfunctionthrowException($e){if($einstanceof UnsupportedException){die("options are used and not supported by the selected server (e.g. collation, readConcern, writeConcern).");}elseif($einstanceof InvalidArgumentException){die("errors related to the parsing of parameters or options.");}elseif($einstanceof MongoDB\Driver\Exception\RuntimeException){die("other errors at the driver level (e.g. connection errors).");}elseif($einstanceof UnexpectedValueException){die(" the command response from the server was malformed.");}elseif($einstanceof MongoDB\Driver\Exception\BulkWriteException ){die("errors related to the write operation. Users should inspect the value returned by getWriteResult() to determine the nature of the error.");}}