天天看點

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資料庫,如何選擇資料庫,如何插入資料,如何查詢資料,以及關閉資料庫連結

<?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"] . "

";

}

// 關閉連結

$m->close();

?>

輸出結果為

Calvin and Hobbes

XKCD