MongoDB入門---安裝php擴充套件&php基本增刪改查操作&php7基本資料操作
經過前些天的學習,我們對MongoDB有了一個大概的瞭解了,對於命令列的操作,也有了基本的認識。但是呢,無論什麼資料庫,最終還是要落實到操作語言上。因為本人擅長的是php這個語言,所以本人就。。。誰讓php是世界上最好的語言呢。。。憋打我哈,接下來直接進入正題哈。。。
首先是安裝php擴充套件。你可以在linux中執行以下命令來安裝MongoDB 的 PHP 擴充套件驅動:
$ sudo pecl install mongo //使用php的pecl安裝命令必須保證網路連線可用以及root許可權
那麼,接下來就是通過原始碼來編譯擴充套件驅動。但是必須手動編譯原始碼包,這樣做的好是最新修正的bug包含在原始碼包中。我們可以在Github上下載MongoDB PHP驅動包。訪問github網站然後搜尋"mongo php driver"(下載地址:
$ git clone https://github.com/mongodb/mongo-php-driver.git $ cd mongo-php-driver $ git submodule sync && git submodule update --init $ phpize $ ./configure $ make all -j 5 $ sudo make install
如果你的php是自己編譯的,則安裝方法如下(假設是編譯在/usr/local/php目錄中):
$ git clone https://github.com/mongodb/mongo-php-driver.git
$ cd mongo-php-driver
$ git submodule sync && git submodule update --init
$ /usr/local/php/bin/phpize
$ ./configure --with-php-config=/usr/local/php/bin/php-config
$ make all -j 5
$ sudo make install
執行完事上面的例子之後,我們需要修改php.ini檔案,在php.ini檔案中新增mongo配置,配置如下:
extension=mongo.so
注意:你需要指明 extension_dir 配置項的路徑。
大家還可以在windows上安裝擴充套件。PECL 上已經提供了用於 Window 平臺的預編譯 php mongodb 驅動二進位制包(下載地址: https://pecl.php.net/package/mongodb),你可以下載與你php對應的版本,但是你需要注意以下幾點問題:
- VC6 是運行於 Apache 伺服器
- 'Thread safe'(執行緒安全)是執行在Apache上以模組的PHP上,如果你以CGI的模式執行PHP,請選擇非執行緒安全模式(' non-thread safe')。
- VC9是運行於 IIS 伺服器上。
- 下載完你需要的二進位制包後,解壓壓縮包,將'php_mongo.dll'檔案新增到你的PHP擴充套件目錄中(ext)。ext目錄通常在PHP安裝目錄下的ext目錄。
完事之後,我們需要開啟php配置檔案 php.ini 新增以下配置:
extension=php_mongo.dll
接著呢,我們來重啟伺服器,通過瀏覽器訪問phpinfo,如果安裝成功,就會看到型別以下的資訊:
接下來就是MAC中安裝MongoDB PHP擴充套件驅動了,你可以使用'autoconf'安裝MongoDB PHP擴充套件驅動。還可以使用'Xcode'安裝MongoDB PHP擴充套件驅動。如果你使用 XAMPP,你可以使用以下命令安裝MongoDB PHP擴充套件驅動:
sudo /Applications/XAMPP/xamppfiles/bin/pecl install mongo
如果以上命令在XMPP或者MAMP中不起作用,你需要在Github上下載相容的預編譯包。然後新增 'extension=mongo.so' 配置到你的php.ini檔案中。
好啦,到這裡呢,關於MongoDB PHP的擴充套件驅動安裝方式就差不多結束了,宣告一下哈,只有那個什麼linux的安裝方式是我自己試驗過的,其他的沒有哈,各位如果安裝失敗的話,不如問問度娘哈。。。廢話不多說啦,直接看PHP是如何來使用MongoDB這個資料庫的。
首先,為了確保正確連線,你需要指定資料庫名,如果資料庫在mongoDB中不存在,mongoDB會自動建立。如下:
<?php $m =newMongoClient();// 連線預設主機和埠為:mongodb://localhost:27017 $db = $m->test;// 獲取名稱為 "test" 的資料庫?>
先來建立集合哈:
<?php $m =newMongoClient();// 連線 $db = $m->test;// 獲取名稱為 "test" 的資料庫 $collection = $db->createCollection("luyaran"); echo "集合建立成功";?>
執行以上程式,輸出結果如下:
集合建立成功
接下來,我們在mongoDB中使用 insert() 方法插入文件:
<?php $m =newMongoClient();// 連線到mongodb $db = $m->test;// 選擇一個數據庫 $collection = $db->luyaran;// 選擇集合 $document = array("title"=>"MongoDB","description"=>"database","likes"=>100,"url"=>"http://www.luyaran.com/mongodb/","by","luyaran"); $collection->insert($document); echo "資料插入成功";?>
執行以上程式,輸出結果如下:
資料插入成功
然後我們再資料庫命令列的狀態下使用db.runoob.find().pretty()檢視資料庫中luyaran這個集合中的資料就好了。如果對自己的程式碼有信心的話,可以接著往下看。就接著使用find() 方法來讀取集合中的文件。
<?php $m =newMongoClient();// 連線到mongodb $db = $m->test;// 選擇一個數據庫 $collection = $db->luyaran;// 選擇集合 $cursor = $collection->find();// 迭代顯示文件標題foreach($cursor as $document){ echo $document["title"]."\n";}?>
執行以上程式,輸出結果如下:
MongoDB
好啦,接下來就看一下修改,我們使用 update() 方法來更新文件:
<?php $m =newMongoClient();// 連線到mongodb $db = $m->test;// 選擇一個數據庫 $collection = $db->luyaran;// 選擇集合// 更新文件 $collection->update(array("title"=>"MongoDB"), array('$set'=>array("title"=>"MongoDB 教程")));// 顯示更新後的文件 $cursor = $collection->find();// 迴圈顯示文件標題foreach($cursor as $document){ echo $document["title"]."\n";}?>
執行以上程式,輸出結果如下:
MongoDB教程
完整的結果集,大家可以通過之前的查詢方式檢視哈。好啦,我們再來使用 remove() 方法來刪除文件,以下例項中我們將移除 'title' 為 'MongoDB 教程' 的一條資料記錄:
<?php $m =newMongoClient();// 連線到mongodb $db = $m->test;// 選擇一個數據庫 $collection = $db->luyaran;// 選擇集合// 移除文件 $collection->remove(array("title"=>"MongoDB 教程"), array("justOne"=>true));// 顯示可用文件資料 $cursor = $collection->find();foreach($cursor as $document){ echo $document["title"]."\n";}?>除了以上例項外,在php中你還可以使用findOne(), save(), limit(), skip(), sort()等方法來操作Mongodb資料庫,
到這裡呢,基本的資料操作,就分享的差不多了。不過近來PHP7這個鬼這麼火,如果不研究一下,那就太可惜了。好啦,不開玩笑了,直接來看看哈。首先使用 pecl 命令來安裝:
$ /usr/local/php7/bin/pecl install mongodb
執行成功後,會輸出以下結果:
……Build process completed successfully Installing'/usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/mongodb.so' install ok: channel://pecl.php.net/mongodb-1.1.7 configuration option "php_ini"isnotset to php.ini location You should add "extension=mongodb.so" to php.ini
接下來我們開啟 php.ini 檔案,新增 extension=mongodb.so 配置。可以直接執行以下命令來新增:
$ echo "extension=mongodb.so">>`/usr/local/php7/bin/php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`
注意:以上執行的命令中 php7 的安裝目錄為 /usr/local/php7/,如果你安裝在其他目錄,需要相應修改 pecl 與 php 命令的路徑。
安裝配置完成之後,我們就來看一下PHP7這個鬼,連結MongoDB的方式:
$manager =newMongoDB\Driver\Manager("mongodb://localhost:27017");
完事呢,我們將 name 為"luyaran" 的資料插入到 test 資料庫的 luyaran 集合中:
<?php $bulk =newMongoDB\Driver\BulkWrite; $document =['_id'=>newMongoDB\BSON\ObjectID,'name'=>'luyaran']; $_id= $bulk->insert($document); var_dump($_id); $manager =newMongoDB\Driver\Manager("mongodb://localhost:27017"); $writeConcern =newMongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY,1000); $result = $manager->executeBulkWrite('test.luyaran', $bulk, $writeConcern);?>//執行結果自行按照之前的方式檢視哈
再來呢,將三個網址資料插入到 test 資料庫的 sites 集合,並讀取迭代出來:
<?php $manager =newMongoDB\Driver\Manager("mongodb://localhost:27017");// 插入資料 $bulk =newMongoDB\Driver\BulkWrite; $bulk->insert(['x'=>1,'name'=>'luyaran','url'=>'http://www.luyaran.com']); $bulk->insert(['x'=>2,'name'=>'Google','url'=>'http://www.google.com']); $bulk->insert(['x'=>3,'name'=>'taobao','url'=>'http://www.taobao.com']); $manager->executeBulkWrite('test.sites', $bulk); $filter =['x'=>['$gt'=>1]]; $options =['projection'=>['_id'=>0],'sort'=>['x'=>-1],];// 查詢資料 $query =newMongoDB\Driver\Query($filter, $options); $cursor = $manager->executeQuery('test.sites', $query);foreach($cursor as $document){ print_r($document);}?>
輸出結果為:
stdClass Object([x]=>3[name]=> taobao [url]=> http://www.taobao.com) stdClass Object([x]=>2[name]=>Google[url]=> http://www.google.com)
接下來,就要將更新 test 資料庫 sites 集合中 x 為 2 的資料:
<?php $bulk =newMongoDB\Driver\BulkWrite; $bulk->update(['x'=>2],['$set'=>['name'=>'hanyanxiao','url'=>'tool.hanyanxiao.com']],['multi'=>false,'upsert'=>false]); $manager =newMongoDB\Driver\Manager("mongodb://localhost:27017"); $writeConcern =newMongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY,1000); $result = $manager->executeBulkWrite('test.sites', $bulk, $writeConcern);?>
然後呢,大家可以使用 "db.sites.find()" 命令檢視資料的變化,在下在這裡就不做過多的贅述了。最後我們看一下刪除了,x 為 1 和 x 為 2的資料,注意 limit 引數的區別:
<?php $bulk =newMongoDB\Driver\BulkWrite; $bulk->delete(['x'=>1],['limit'=>1]);// limit 為 1 時,刪除第一條匹配資料 $bulk->delete(['x'=>2],['limit'=>0]);// limit 為 0 時,刪除所有匹配資料 $manager =newMongoDB\Driver\Manager("mongodb://localhost:27017"); $writeConcern =newMongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY,1000); $result = $manager->executeBulkWrite('test.sites', $bulk, $writeConcern);?>具體產生的資料變化,大家可以在後臺慢慢檢視,本人就不做贅述了,今天的分享到這裡就差不多完事了,各位勿噴哈,完事了呢,如果覺得還不錯的話,請多多點贊支援哈。。。