PHP操作mongodb--study
基礎教程:
1.連線mongo資料庫伺服器。
語法範例:
<?php
$connection = new MongoClient(); // 連線到本地資料庫,預設埠為27017.即:localhost:27017
$connection = new MongoClient( "mongodb://example.com" ); // 連線遠端資料庫,預設埠為27017
$connection = new MongoClient( "mongodb://example.com:65432" ); // 連線遠端資料庫,埠號為指定的埠號。
?>
2.連線一個數據庫
語法範例:
<?php $connection = new MongoClient();//連線到本地資料庫,預設埠:27017
$db = $connection->dbname;//選擇資料庫名為dbname的資料庫
?>
資料庫名不用事先建立,當你選擇它時,mongodb可以建立一個新的名為dbname資料庫。
注意:不要寫錯資料庫名,否則你回不經意間生成一個數據庫,這會導致資料庫混亂。
以下程式會因拼寫錯誤生成兩個資料庫:
<?php
$connection = new MongoClient();
$db = $connection->mybiloglongdbname;//連線一個數據庫
$db = $connection->mybiloglongdbanme;//連線一個不一樣名字的資料庫
?>
3.連線一個數據庫集合
獲取一個集合和連線一個數據庫語法是相同的。
語法範例:
<?php
$connection = new MongoClient();
$db = $connection->baz;
$collection = $db->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")
);
?>
注意:你可以有巢狀的陣列和物件。驅動程式通常將一個關聯陣列作為一個數據庫中的對像來儲存。
一個數字索引陣列通常按以下情況作為一個數組來儲存:關鍵字從0開始,不間斷。或者作為一個物件
:陣列的關鍵字不是從0開始,中間會有間斷。
插入這個文件,可以用這個函式 MongoCollection::insert():
<?php
$connection = new MongoClient();
$collection = $connection->database->collectionName;
$collection->insert($doc);
?>
5,查詢一個集合使用 MongoCollection::findOne()
為了能搜尋出集合資料,我們事先已經在資料庫中儲存了相應的資料。我們只需要一個簡單的方法
MongoCollection::findOne() 便可以從集合中取到唯一的文件。這個方法適用於:只有唯一的一條資料匹配
查詢資料。
例項:
<?php
$connection = new MongoClient();
$collection = $connection->database->collectionName;
$document = $collection->findOne();
var_dump($document);
?>
以上例項輸出:
array(6) { ["_id"]=> object(MongoId)#8 (1) { ["$id"]=> string(24) "4e2995576803fab768000000" } ["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”的欄位已經被自動加到文件中,_id 是主鍵欄位。
如果文件沒有定義主鍵欄位,驅動程式會自動新增一個。
若你定義一個你自己的_id欄位,它必須對於整個集合是獨一無二的。
例子:
<?php
$connection = new MongoClient();
$db = $connection->datebase;
$db->foo->insert(array("_id"=>1));
//下面這個將丟擲一個異常
$db->foo->insert(array("_id"=>1));
//下面這個是正確的,因為這個是在另外一個集合中
$db->bar->insert(array("_id"=>1));
?>
你也可以通過傳遞陣列("w"=>0)作為第二個元素,選擇關閉該行為。
也就是說驅動程式不必等待資料庫去確認寫,也不必丟擲複製_id的異常。
6.新增多個文件
為了讓我們做更多有意思的事情,我們來新增許多簡單的文件給集合。
這些文件僅僅是這種形式的資料array("i"=>value),我們可以在一個迴圈中相當有效率的新增上。
<?php
$connection = new MongoClient();
$collection = $connection->database->collectionName;
for($i=0;$i<100;$i++)
{
$collection->insert(array('i'=>$i, "field{$i}"=>$i*2));
}
?>
注意:我們可以插入關鍵字不同的文件在同一個集合中,這也就是為什麼我們稱MongoDB是模式自由。7.統計一個集合中文件數目
當我們在集合中插入101個文件時,我們可以用方法MongoCollection::count()來統計文件數:
<?php
$connection = new MongoClient();
$collection = $connection->database->collectionName;
echo $collection->count();
?>
輸出結果為:101
8.運用Cursor得到所有的文件
為了得到集合中所有的文件,我們將用MongoCollection::find()。
find()方法可以返回一個MongoCursor物件,這個物件允許我們可以迭代出符合我們查詢條件的文件。
然後 查詢所有文件,並打印出來。
<?php
$connection = new MongoClient();
$collection = $connection->database->collectionName;
$cursor = $collection->find();
foreach($cursor as $id=>$value)
{
echo "$id:";
var_dump($value);
}
?>
可以打印出集合中所有的文件。
$id i是 文件的_id欄位,$value是文件本身。
9.設定查詢標準
我們可以用一條查詢語句通過方法 MongoCollection::find()來獲得集合中文件的一個子集。例如:如果你想找到 "i"欄位的值為71的文件,我們可以按下面的做法去做:
<?php
$connection = new MongoClient();
$collection = $connection->database->collectionName;
$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" }
10.查詢一系列文件
我們可以從集合中查詢一系列文件。
例如,如果你想獲得‘i’>50的所有文件,我們可以按下面這樣去寫
<?php
$connection = new MongoClient();
$collection = $connection->database->collectionName;
$query = array("i"=>array('$gt'=>50));
$cursor = $coll->find($query);
while($cursor->hasNext())
{
var_dump($cursor->getNext());
}
?>
我們也可以查詢一個範圍:比如 20<i<=30
<?php
$connection = new MongoClient();
$collection = $connection->db->collectionName;
$query = array('i'=>array('$gt'=>20,"\$lte"=>30));
$cursor = $collection->find($query);
while($cursor->hasNext)
{
var_dump($cursor->getNext());
}
?>
$gt 大於; $gte 大於等於 ; $in 範圍 ; $it 小於;$lte小於等於;
find( { qty: { $in: [ 5, 15 ] } } )
$ne 查詢所有不等於該元素的資料;
$nin 查詢不在範圍內的所有資料
另外注意:單引號下$字元不需要轉義字元,但是雙引號下需要轉義字元
11.建立一個索引
MongoDB支援索引,而且索引可以非常容易的加到集合中。
為了建立一個索引,你需要定義一個欄位和方向:升序(1)或者降序(-1)。
以下建立了一個升序的索引在‘i’欄位上:
<?php
$connection = new MongoClient();
$collection = $collection->database->collectionName();
$collection->ensureIndex(array("i"=>1));//建立一個在‘i’上升序的索引
$collection->ensureIndex(array("i"=>-1, "j"=>1));//建立一個在‘i’上降序,在‘j’上升序的索引。
?>
當資料增長時,索引就成了資料庫良好的讀取效能的關鍵。
如果你對索引讀取效能還不熟悉,你可以參考MongoCollection::ensureIndex()MongoCollection::ensureIndex()的相關文件。
參考:http://www.php.net/manual/zh/mongo.tutorial.connecting.php