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

1.連接數據庫 php

使用下面的代碼建立一個數據庫連接
<?php
$connection = new Mongo(); //連接到 localhost:27017
$connection = new Mongo( "example.com" ); //連接到遠程主機(默認端口)
$connection = new Mongo( "example.com:65432" ); //連接到遠程主機的自定義的端口
?>

如今你可使用$connection連接來操做數據庫了 mongodb

2.選擇數據庫 數據庫

使用下面的代碼來選擇一個數據庫
<?php
$db = $connection->dbname;
?>

這裏的數據庫並不必定是一個已經存在的數據庫,若是所選擇的數據庫不存在,則會新建一個數據庫,因此在選擇數據庫的時候,注意必定要填上正確的數據庫名

若是拼寫錯誤的話,頗有可能會新建一個數據庫 數組


<?php
$db = $connection->mybiglongdbname;
//作一些事情
$db = $connection->mybiglongdbnme;
//如今會連上一個新的數據庫
?>


3.獲取一個集合 spa

獲取一個集合跟選擇數據庫擁有相同的語法格式 code


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


4.插入一個文檔 對象

多維數組是能夠被儲存到數據庫中的基本單元
一個隨機的文檔多是這樣
<?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的文檔,咱們可使用下列方法

咱們將打印以下數據
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);

//添加另外一個元素,使用不一樣的格式
$obj = array( "title" => "XKCD", "online" => true );
$collection->insert($obj);

//查詢全部的集合
$cursor = $collection->find();

//重複顯示結果
foreach ($cursor as $obj) {
  echo $obj["title"] . "\n";
}

// 關閉連接
$m->close();
?>
輸出結果爲 Calvin and Hobbes XKCD
相關文章
相關標籤/搜索