本文實例講述了PHP使用mongoclient簡單操作mongodb數(shù)據(jù)庫。分享給大家供大家參考,具體如下:
最好回到《mongodb shell基礎(chǔ)命令【進階篇】》,再來看這里的內(nèi)容,否則有些東西我講的比較籠統(tǒng)。
好了,不廢話了,直接貼代碼吧,別害怕看代碼,基本每行都寫了注釋了
!--
1、本文采用mongoClient類來實現(xiàn)mongodb的簡單操作,
2、需要事先熟悉《mongodb基礎(chǔ)命令——進階篇》的內(nèi)容
3、其中更新數(shù)據(jù)部分只給出了一個$set的例子,但是跟操作命令是一樣的,注意理解與嘗試
4、在最下來有對函數(shù)進行簡單的介紹,其中的一些內(nèi)容會在本人學習完后續(xù)章節(jié)后回來補充的
-->
?php
try {
// 連接mongodb數(shù)據(jù)庫
$mongo = new MongoClient();
// 選擇數(shù)據(jù)庫
$db_name=$mongo->test;
// 或者這樣也可以
// $db_name=$mongo->selectDB('test');
// 選擇集合
$collection_name=$db_name->student;
// 或者和上面一樣
// $collection_name=$$db_name->selectCollection('collection_name');
echo 'pre>';
// 查看全部dbs
$dbs=$mongo->listDBs();
// var_dump($dbs);
$collections=$db_name->listCollections();
// var_dump($collections);
// 定義被插入的數(shù)據(jù),而且php的數(shù)組形式與json格式類似,所以很容易理解
$input = array(
'name' =>'yang' ,
'sex'=>'man',
'sorce' => array(
'math' =>60 ,
'pe'=>30
)
);
// 插入數(shù)據(jù),$result會顯示插入數(shù)據(jù)的結(jié)果
// insert的第二個參數(shù)內(nèi)容請看--函數(shù)1
// $result=$collection_name->insert($input);
// var_dump($result);
// 查詢單條數(shù)據(jù),跟shell命令里的findOne()一樣
$findOne=$collection_name->findOne();
// var_dump($findOne);
// 查找全部數(shù)據(jù),記住一點,find()函數(shù)的返回值不是跟findOne()函數(shù)一樣的數(shù)組。而是一個對象,所以不能直接
// 打印出來,至于如何讀取其中的內(nèi)容,可以使用foreach循環(huán)
$find=$collection_name->find();
// 可以跟mongo shell中一樣為find()函數(shù)傳遞第一個篩選參數(shù)
$situation = array(
'name' => 'yang',
);
// 選擇返回的字段內(nèi)容
$field = array('sorce' => 1 );
// 詳細解釋看--函數(shù)2
$find=$collection_name->find($situation,$field);
// while ($each=$find->getNext()) {
// var_dump($each);
// }
$sort=$collection_name->find()->sort(array('math' => -1, ));
$limit=$collection_name->find()->sort(array('math' => -1, ))->limit(2);
$skip=$collection_name->find()->sort(array('math' => -1, ))->skip(2);
$count=$collection_name->find()->sort(array('math' => -1, ))->count();
// echo $count;
// foreach ($skip as $value) {
// var_dump($value);
// }
// 條件操作符的使用
$situation2=array(
// 注意這里字段的設置跟shell中一樣
'item.quantity'=>array('$gt'=>5)
);
$gt=$db_name->orders->find($situation2);
/**********************************************數(shù)據(jù)的更新*******************************************/
// 注意,接下來這段代碼會更新整個匹配到的文檔,就跟update沒有使用$set一樣
// 詳情查看函數(shù)3
$update=$db_name->orders->update(
array('_class'=>'com.mongo.model.Orders'),
array('_class'=>'hello world')
);
// 注意$set的位置,是不是與shell命令中一致
$update=$db_name->orders->update(
array('_class'=>'com.mongo.model.Orders'),
array('$set'=>array('_class'=>'hello world'))
);
// 從這里可以看到,如果會shell命令的話,那么這一節(jié)的重點就是將shell命令與php數(shù)組之間的相互轉(zhuǎn)化了
/**********************************************數(shù)據(jù)的刪除*******************************************/
// 刪除集合中的數(shù)據(jù)
$remove=$db_name->orders->remove(array('_class'=>'com.mongo.model.Orders'));
// 刪除整個集合
$db_name->orders->drop();
// 本來還有一些集合之間使用DBRef聯(lián)查以及GRidFS的內(nèi)容的,但是那個還是等以后要用了再來補充好了
} catch (MongoConnectionException $e) {
echo $e->getMessage();
}
?>
其中幾個函數(shù)的解釋
--------------------------函數(shù)1--------------------
插入數(shù)據(jù)函數(shù) insert
$mongo->$db_name->$collection_name->insert($input.$options)
$option中的參數(shù)以及默認值
$option=array(
'fsync'=> false,
'j' => false,
'w' => 1,
'wtimeout'=>10000,
'timeout'=>10000
)
'fsync'
這個參數(shù)設置為真時,php將會告訴mongodb將當前寫入數(shù)據(jù)直接寫入硬盤,即使還沒有全部從php文檔寫入mongodb數(shù)據(jù)庫
'j'
這個參數(shù)設置為真市,php將會告訴mongodb在數(shù)據(jù)插入成功之前就將本次修改寫入日志
'w'
如果設置成0,寫操作將不會被確認,在這里還不會深究
'wtimeout'
跟上面的'w'綁定使用的,后面會介紹的
'timeout'
客戶端等待服務器響應的超時時間,也就是如果php的服務器等待mongodb數(shù)據(jù)庫寫入數(shù)據(jù)的時間,如果超過了timeout規(guī)定的時間,就算本次寫入失敗
---------------------------函數(shù)2--------------------
篩選數(shù)據(jù)函數(shù) find
$mongo->$db_name->$collection_name->find($situation,$field)
$situation可以為空,表示返回全部數(shù)據(jù),也可以是一個數(shù)組,表示篩選條件,就跟mongodb命令一樣
$field也可以為空,表示返回全部字段,也可以跟第一個參數(shù)一樣,傳入數(shù)組,規(guī)定返回的字段
注意,即使上面使用$field限制返回字段,_id字段還是會自動返回的
---------------------------函數(shù)3--------------------
更新數(shù)據(jù) update
$mongo->$db_name->$collection_name->update($criteria,$update,$option)
結(jié)合shell命令就很好理解了
$criteria 表示篩選進行更新的文檔
$update 就是要更新后的數(shù)據(jù)
$option=array(
'upsert'=>false,
'multiple'=>true,
'fsync'=>false,
'w'=>1,
'wtimeout'=>10000,
'timeout'=>10000
)
后幾個的作用在函數(shù)1里講過了就不贅述了,upsert為true表示如果當前文檔存在就更新,不存在就創(chuàng)建,multiple為真表示匹配該條件的文檔都會被更新,即不止更新滿足條件的一個文檔。
---------------------------函數(shù)3--------------------
刪除數(shù)據(jù) remove
$mongo->$db_name->$collection_name->remove($remove,$option)
$remove表示跟find()
第一個參數(shù)一樣的篩選條件
$option=array(
'justOne'=>false,
'fsync'=>false,
'w'=>1,
'j'=>false,
'wtimeout'=>10000,
'timeout'=>10000
)
上面有的我就不贅述了,justOne根據(jù)名字來,就一個,如果為true表示就刪除一個匹配$remove的文檔
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP+MongoDB數(shù)據(jù)庫操作技巧大全》、《PHP基于pdo操作數(shù)據(jù)庫技巧總結(jié)》、《php面向?qū)ο蟪绦蛟O計入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。
您可能感興趣的文章:- PHP封裝的簡單連接MongoDB類示例
- php如何利用pecl安裝mongodb擴展詳解
- TP5(thinkPHP5)框架mongodb擴展安裝及特殊操作示例
- php操作mongodb封裝類與用法實例
- PHP操作Mongodb封裝類完整實例
- mongodb和php的用法詳解