MongoDB與PHP的添加、修改、查詢、刪除

 

鏈接數據庫
使用下面的代碼創建一個數據庫鏈接
<?php
$connection = new Mongo(); //鏈接到 localhost:27017
$connection = new Mongo( "example.com" ); //鏈接到遠程主機(默認端口)
$connection = new Mongo( "example.com:65432" ); //鏈接到遠程主機的自定義的端口
?>
現在你可以使用$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);
?> 
使用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儲存元素中以_以及$開頭的都是供內部使用的
添加更多文檔
爲了做一些更有趣的事情,我們添加更多簡單的文檔到集合中,這些文檔如下
<?php
array( “i” => value );
?>
我們可以使用循環相當有效的插入數據
<?php
for($i=0; $i<100; $i++) {
    $collection->insert( array( “i” => $i ) );
}
?>
注意:我們可以插入不同的字段在同一字符集中,在這方面意味着MongoDB擁有非常自由的儲存模式
在一個集合中計算文檔的數量
現在我們插入了101個文檔(我們用循環插入了100個,之前還插入了一個),我們可以使用count()來看看我們的數據是不是都被插入進去了
<?php
echo $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數據庫,如何選擇數據庫,如何插入數據,如何查詢數據,以及關閉數據庫鏈接
輸出結果爲
Calvin and Hobbes
XKCD
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章