1. 程式人生 > >MongoDB入門---安裝php擴充套件&php基本增刪改查操作&php7基本資料操作

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"(下載地址:

https://github.com/mongodb/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);?>
    具體產生的資料變化,大家可以在後臺慢慢檢視,本人就不做贅述了,今天的分享到這裡就差不多完事了,各位勿噴哈,完事了呢,如果覺得還不錯的話,請多多點贊支援哈。。。