PHP中MongoDB資料庫的操作

來源:互聯網
上載者:User
這篇文章主要介紹了PHP中MongoDB資料庫的串連、添加、修改、查詢、刪除等操作執行個體,需要的朋友可以參考下

下載PHP 擴充mongon.mod.dll
然後php.ini添加 extension=php_mongo.dll
最後phpinfo() 尋找到


表標PHP已經內建了mongo功能,你就可以操作下面的代碼(但是你必須有安裝mongodb伺服器)

一、串連資料庫

使用下面的代碼建立一個資料庫連結

<?php$connection = new Mongo(mongodb://192.168.1.5:27017); //連結到 192.168.1.5:27017//27017連接埠是預設的。$connection = new Mongo( "example.com" ); //連結到遠程主機(預設連接埠)$connection = new Mongo( "example.com:65432" ); //連結到遠程主機的自訂的連接埠print_r($connection->listDBs());//能列印出資料庫數組,看看有幾個資料庫。?>


說有一個資料庫名字叫local,總大小1個位元組,他是空的。看見ok表示運行成功。

現在你可以使用$connection連結來操作資料庫了

選擇資料庫

使用下面的代碼來選擇一個資料庫

<?php$db = $connection->dbname;?>

這裡的資料庫並不一定是一個已經存在的資料庫,如果所選擇的資料庫不存在,則會建立一個資料庫,所以在選擇資料庫的時候,注意一定要填上正確的資料庫名
如果拼字錯誤的話,很有可能會建立一個資料庫

<?php$db = $connection->mybiglongdbname;//做一些事情$db = $connection->mybiglongdbnme;//現在會連上一個新的資料庫?>

擷取一個集合

擷取一個集合跟選擇資料庫擁有相同的文法格式

<?php$db = $connection->baz;//選擇資料庫$collection = $db->foobar;//選擇foobar集合//或者使用更簡潔的方式$collection = $connection->baz->foobar;?>

插入一個文檔

多維陣列是可以被儲存到資料庫中的基本單元
一個隨機的文檔可能是這樣

<?php$doc = array( ”name” => “MongoDB”,    “type” => “database”,    “count” => 1,    “info” => (object)array( “x” => 203,    “y” => 102),    “versions” => array(“0.9.7″, “0.9.8″, “0.9.9″));?>

注意:你可以嵌套數組與對象,對象與文檔在mongodb中幾乎是一樣的,你可以使用$doc調用一個文檔或對象,但是info欄位總是一個對象而不是一個文檔,
本約束適用於所有文檔
使用MongoCollection::insert()插入一個文檔

<?php$m = new Mongo();$collection = $m->foo->bar;$collection->insert($doc);?>

mongodb 的 insert()、save() ,區別主要是:若存在主鍵,insert() 不做操作,而save() 則更改原來的內容為新內容。
存在資料: { _id : 1, " name " : " n1 " }
insert({ _id : 1, " name " : " n2 " }) 會提示錯誤
save({ _id : 1, " name " : " n2 " }) 會把 n1 改為 n2 。

使用MongoCollection::findOne()查詢文檔

為了證明上面那段代碼的資料已經插入到資料庫裡了,我們進行簡單的 findOne()操作以得到集合中的第一個文檔資料,這種方法只返回一個文檔資料,
這種方法適用於在你的查詢語句的時候只匹配一個文檔或者你只關心第一條資料

<?php$obj = $collection->findOne();var_dump( $obj );?>

你會看到下列結果

array(5) {  ["_id"]=>  object(MongoId)#6 (0) {  }  ["name"]  string(7) “MongoDB”  ["type"]=>  string(8) “database”  ["count"]=>  int(1)  ["info"]=>  array (2) {    ["x"]=>    int(203)    ["y"]=>    int(102)  }  ["versions"]  array(3) {    [0]=>    string(5) “0.9.7″    [1]=>    string(5) “0.9.8″    [2]=>    string(5) “0.9.9″  }}

注意_id欄位自動載入了文檔上,MongoDB儲存元素中以_以及$開頭的都是供內部使用的

添加更多文檔

為了做一些更有趣的事情,我們添加更多簡單的文檔到集合中,這些文檔如下

<?phparray( “i” => value );?>

我們可以使用迴圈相當有效插入資料

<?phpfor($i=0; $i<100; $i++) {    $collection->insert( array( “i” => $i ) );}?>

注意:我們可以插入不同的欄位在同一字元集中,在這方面意味著MongoDB擁有非常自由的儲存模式

在一個集合中計算文檔的數量

現在我們插入了101個文檔(我們用迴圈插入了100個,之前還插入了一個),我們可以使用count()來看看我們的資料是不是都被插入進去了

<?phpecho $collection->count();?>

這段代碼將列印出101

MongoCollection::count() 也可以查詢欄位資料

使用遊標得到集合中的所有文檔

為了得到集合中的所有文檔,我們可以使用 MongoCollection::find()方法,find()方法返回一個 MongoCursor對象,可以讓我們重複得到查詢所匹配的的文檔

<?php$cursor = $collection->find();foreach ($cursor as $id => $value) {    echo “$id: “;    var_dump( $value );}?>

這樣我們會列印出集合中的這101個文檔,$id就是文檔中的_id欄位,$value 就是文檔本身

為查詢規定一個標準
我們可以通過find()方法得到集合中的文檔子集,例如,我們要查詢出集合中i欄位為71的文檔,我們可以使用下列方法

<?php$query = array( “i” => 71 );$cursor = $collection->find( $query );while( $cursor->hasNext() ) {    var_dump( $cursor->getNext() );}?>

我們將列印如下資料

array(2) {  ["_id"]=>  object(MongoId)#6 (0) {  }  ["i"]=>  int(71)  ["_ns"]=>  “testCollection”}

為查詢設定一個範圍

我們可以通過find()建立一個查詢語句以得集合中的一個子集,例如如果我們得到所有”i”>50的文檔,我們可以使用如下代碼

<?php$query = array( “i” => array(‘$gt' =>50)); //注意'$gt'兩邊的單引號$cursor = $coll->find( $query );while( $cursor->hasNext() ) {    var_dump( $cursor->getNext() );}?>

我們同樣可以得到20 < i <= 30之間的資料

<?php$query = array( “i” => array( “\$gt” => 20, “\$lte” => 30 ) );$cursor = $coll->find( $query );while( $cursor->hasNext() ) {    var_dump( $cursor->getNext() );}?>

我們非常容易漏掉$貨幣符號,你也可以選擇你自訂的符號來代替貨幣符號,選擇一個不會在你的建裡面出現的符號例如”:”,在php.ini中加上這麼一句話

mongo.cmd = “:”

那麼上面的代碼就可以替換成

<?php$query = array( “i” => array( “:gt” => 20, “:lte” => 30 ) );?>

當然你也可以使用ini_set(“mongo.cmd”, “:”)的方法來改變

建立一個索引

MongoDB支援索引,並且可以很容易的加到一個集合中,你只要指定某個欄位為索引就行了,並且還可以指定 正序索引(1)與 倒序索引(-1)
下面的代碼為I建立了索引

<?php$coll->ensureIndex( array( “i” => 1 ) );  //在”i”上建立了一個索引$coll->ensureIndex( array( “i” => -1, “j” => 1 ) );//在”i”上建立了倒序索引 在”j”上建立了正序索引?>

一個完整的簡單例子

這個例子展示了如何連結mongodb資料庫,如何選擇資料庫,如何插入資料,如何查詢資料,以及關閉資料庫連結

<?php//連結$m = new Mongo();// 選擇一個資料庫$db = $m->comedy;$collection = $db->cartoons;//添加一個元素$obj = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" );$collection->insert($obj);//修改$newdata = array('$set' => array("title" => "Calvin and Hobbes"));$collection->update(array("author" => "caleng"), $newdata);//刪除$collection->remove(array('author'=>'caleng'), array("justOne" => true));//添加另一個元素,使用不同的格式$obj = array( "title" => "XKCD", "online" => true );$collection->insert($obj);//查詢所有的集合$cursor = $collection->find();//重複顯示結果foreach ($cursor as $obj) {    echo $obj["title"] . "\n";}// 關閉連結$m->close();?>

輸出結果為

Calvin and HobbesXKCD

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.