您好,登錄后才能下訂單哦!
這篇文章主要介紹了PHP操作MongoDB的方法的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇PHP操作MongoDB的方法文章都會有所收獲,下面我們一起來看看吧。
PHP的mongodb擴展安裝
1 2 3 4 5 6 | # https://github.com/mongodb/mongo-php-driver/archive/master.zip # unzip master.zip # /usr/local/php/bin/phpize # ./config --with-php-config=/usr/local/php/bin/php-config # make # make install |
將mongo.so添加到php.ini
1 2 | # vim /usr/local/php/etc/php.ini extension = mongo.so |
重啟php-fpm生效
1 | # /usr/local/php/sbin/php-fpm -y /usr/local/php/etc/php-fpm.comf |
php的mongodb擴展,提供了4個核心類接口
1). 針對mongodb的連接操作類MongoClient
2). 針對mongodb的數據庫操作類MongoDB
3). 針對mongodb的集合操作類MongoCollection
4). 針對mongodb的查詢結果集(游標)操作類MongoCursor
連接MongoDB
mongodb驅動連接格式為:mongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]],如:
mongodb://localhost
mongodb://user:password@localhost
mongodb://user:password@localhost/database
mongodb://example1.com:27017,example2.com:27017
mongodb://localhost,localhost:27018,localhost:27019
mongodb://host1,host2,host3/?slaveOk=true
mongodb://localhost/?safe=true
mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000
mongodb://rs1.example.com:27017,rs2.example.com:27017/?replicaSet=myReplSetName
mongodb://localhost/?journal=true&w=majority&wTimeoutMS=20000
具體含義參見《ttlsa教程系列之mongodb—(一)mongodb介紹》 http://www.ttlsa.com/html/1594.html
PHP連接實例:
1 2 3 4 5 | <?php $m = new MongoClient("mongodb://localhost/?journal=true&w=majority&wTimeoutMS=20000"); $m = new MongoClient("mongodb://rs1.example.com:27017,rs2.example.com:27017/?replicaSet=myReplSetName")); $m = new MongoClient("mongodb://rs1.example.com:27017", array("replicaSet" => "myReplSetName")); $m = new MongoClient("mongodb://rs1.example.com:27017,rs2.example.com:27017", array("replicaSet" => "myReplSetName","wTimeoutMS"=>20000)); |
在連接到復制集時,用它來判斷哪臺是primary。返回主機名稱、端口號、健康程度、狀態(1-primary,2-secondary,0-other)、ping耗時、前一次ping的時間戳。
1 | $m->getHosts(); |
列出所有數據庫,返回數據庫名稱、大小、是否為空以及總大小、ok狀態。
1 | $m->listDBs(); |
選擇數據庫,返回數據庫對象
1 2 3 | $db = $m->db_name; 或 $db = $m->selectDB(db_name); |
選擇表(集合),返回文檔集合對象
1 2 3 4 5 | $col = $m->selectCollection(db_name, col_name); 或 $col = $m->selectDB(db_name)->selectCollection(col_name); 或 $col = $m->db_name->col_name; |
列出所有集合,返回集合對象
1 | $col_list = $db->listCollections(); |
獲取當前選擇的數據庫名,返回數據庫名
1 | $db_name = $db->__toString(); |
刪除當前數據庫
1 | $db->drop(); |
設置slaveok狀態(可讀狀態設置)
1 | $db->setSlaveOkay(true/false); |
獲取slaveok當前狀態
1 | $db->getSlaveOkay(); |
插入數據MongoCollection::insert(array $a,array $options)
array $a 要插入的數組
array $options 選項:safe 是否返回操作結果信息;fsync 是否直接插入到物理硬盤;w 寫入份數;timeout 超時時間
1 2 3 4 5 | <?php $coll = $m->db_name->col_name; $a = array(’website'=>’www.ttlsa.com'); $options = array(’safe’=>true); $rs = $coll->insert($a,$options); $rs為數組,包含操作信息 |
刪除集合中的記錄MongoCollection::remove(array $criteria,array $options)
array $criteria 條件
array $options 選項: safe 是否返回操作結果; fsync 是否是直接影響到物理硬盤; justOne 是否只影響一條記錄
1 2 3 4 5 | <?php $coll = $m->db_name->col_name; $c = array(’website'=>'www.ttlsa.com',’hit’=>array(’$lt’=>100)); $options = array(’safe’=>true); $rs = $coll->remove($c,$options); $rs為數組,包含操作信息 |
更新集合中的記錄MongoCollection::update(array $criceria,array $newobj,array $options)
array $criteria 條件
array $newobj 要更新的內容
array $options 選項: safe 是否返回操作結果; fsync 是否是直接影響到物理硬盤; upsert 是否沒有匹配數據就添加一條新的; multiple 是否影響所有符合條件的記錄,默認只影響一條
1 2 3 4 5 6 | <?php $coll = $m->db_name->coll_name; $c = array(’uid'=>888,’login_count’=>array(’$lt’=>100)); $newobj = array(’vip'=>’1',’score'=>’10000'); $options = array(’safe’=>true,’multiple’=>true); $rs = $coll->remove($c,$newobj,$options); $rs為數組,包含操作信息 |
查詢集合獲取單條記錄MongoCollection::findOne(array $query,array $fields)
array $query 條件
array $fields 要獲得的字段
1 2 3 4 5 | <?php $coll = $m->db_name->col_name; $query = array(’score’=>array(’$lt’=>10000)); $fields = array(’uid'=>true,’vip'=>true); $rs = $coll->findOne($query,$fields); 返回array或null |
獲取多條記錄MongoCollection::find(array $query,array $fields)
array $query 條件
array $fields 要獲得的字段
1 2 3 4 5 6 | <?php $coll = $m->db_name->col_name; $query = array(’s’=>array(’$lt’=>100)); $query = array(’score’=>array(’$lt’=>10000)); $fields = array(’uid'=>true,’vip'=>true); $rs = $coll->find($query,$fields); 返回游標對象MongoCursor。 |
獲取查詢結果數量
1 2 | $cursor = $coll->find(); $num = $cursor->count(); |
選定列MongoCursor::fields
1 2 3 | $cursor->fields(array(column_name1 => true, column_name2 => false)); 或 $cursor = $coll->find()->fields(array(column_name1 => true, column_name2 => false)); |
分頁
1 | $cursor = $coll->find()->limit(30)->skip(0); |
排序MongoCursor::sort
1 | $cursor = $coll->find()->sort(array(column_name1 => -1, column_name2 => 1)); |
取查詢結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $cursor = $coll->find($query,$fields); while($cursor->hasNext()){ $r = $cursor->getNext(); var_dump($r); } 或者 $cursor = $coll->find($query,$fields); $r = array(); foreache($cursor as $k=>$v){ var_dump($v); $r[] = $v; } 或者 $cursor = $coll->find($query,$fields); $array= iterator_to_array($cursor); |
快照MongoCursor::snapshot
保證一致性。在做find()操作時,獲得$cursor之后,這個游標是動態的,在循環取結果過程中,如果有其他連接來更改符合條件的記錄時,這個$cursor也會跟著變化的。$cursor->snapshot();之后,再插入或刪除符合條件的記錄時,獲取的結果集將不再變化。如果是小于1M的結果集會自動被當作snapshot來處理。
如果要獲取$cursor之后不變的結果需要這么做:
1 2 | $cursor = $coll->find($query,$fields); $cursor->snapshot(); |
snapshot對findOne無效。
關于“PHP操作MongoDB的方法”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“PHP操作MongoDB的方法”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。