來源:http://blog.sina.com.cn/s/blog_966e430001019s8z.html
創(chuàng)新互聯(lián)公司長期為上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為太康企業(yè)提供專業(yè)的
做網(wǎng)站、成都網(wǎng)站制作,
太康網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
PHP 擴(kuò)展mongon.mod.dll 下載http://cn.php.net/manual/en/mongo.installation.php#mongo.installation.windows
然后php.ini添加 extension=php_mongo.dll
最后phpinfo() 查找到
表標(biāo)PHP已經(jīng)自帶了mongo功能,你就可以操作下面的代碼(但是你必須有安裝mongodb服務(wù)器)
鏈接數(shù)據(jù)庫使用下面的代碼創(chuàng)建一個數(shù)據(jù)庫鏈接
<?php
$connection = new Mongo(mongodb://192.168.1.5:27017); //鏈接到 192.168.1.5:27017//27017端口是默認(rèn)的。
$connection = new Mongo( "example.com" ); //鏈接到遠(yuǎn)程主機(jī)(默認(rèn)端口)
$connection = new Mongo( "example.com:65432" ); //鏈接到遠(yuǎn)程主機(jī)的自定義的端口
print_r($connection->listDBs());//能打印出數(shù)據(jù)庫數(shù)組,看看有幾個數(shù)據(jù)庫。
如圖
上圖說有一個數(shù)據(jù)庫名字叫l(wèi)ocal,總大小1個字節(jié),他是空的??匆妎k表示運行成功。
?>
現(xiàn)在你可以使用$connection鏈接來操作數(shù)據(jù)庫了
選擇數(shù)據(jù)庫使用下面的代碼來選擇一個數(shù)據(jù)庫
<?php
$db = $connection->dbname;
?>
這里的數(shù)據(jù)庫并不一定是一個已經(jīng)存在的數(shù)據(jù)庫,如果所選擇的數(shù)據(jù)庫不存在,則會新建一個數(shù)據(jù)庫,所以在選擇數(shù)據(jù)庫的時候,注意一定要填上正確的數(shù)據(jù)庫名
如果拼寫錯誤的話,很有可能會新建一個數(shù)據(jù)庫<?php
$db = $connection->mybiglongdbname;
//做一些事情
$db = $connection->mybiglongdbnme;
//現(xiàn)在會連上一個新的數(shù)據(jù)庫
?>
獲取一個集合獲取一個集合跟選擇數(shù)據(jù)庫擁有相同的語法格式
<?php
$db = $connection->baz;//選擇數(shù)據(jù)庫
$collection = $db->foobar;//選擇foobar集合
//或者使用更簡潔的方式
$collection = $connection->baz->foobar;
?>
插入一個文檔多維數(shù)組是可以被儲存到數(shù)據(jù)庫中的基本單元
一個隨機(jī)的文檔可能是這樣
<?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″)
);
?>
注意:你可以嵌套數(shù)組與對象,對象與文檔在mongodb中幾乎是一樣的,你可以使用$doc調(diào)用一個文檔或?qū)ο?,但是info字段總是一個對象而不是一個文檔,
本約束適用于所有文檔使用MongoCollection::insert()插入一個文檔
<?php
$m = new Mongo();
$collection = $m->foo->bar;
$collection->insert($doc);
?>
mongodb 的 insert()、save() ,區(qū)別主要是:若存在主鍵,insert() 不做操作,而save() 則更改原來的內(nèi)容為新內(nèi)容。
存在數(shù)據(jù): { _id : 1, " name " : " n1 " }
insert({ _id : 1, " name " : " n2 " }) 會提示錯誤
save({ _id : 1, " name " : " n2 " }) 會把 n1 改為 n2 。
使用MongoCollection::findOne()查詢文檔
為了證明上面那段代碼的數(shù)據(jù)已經(jīng)插入到數(shù)據(jù)庫里了,我們進(jìn)行簡單的 findOne()操作以得到集合中的第一個文檔數(shù)據(jù),這種方法只返回一個文檔數(shù)據(jù),
這種方法適用于在你的查詢語句的時候只匹配一個文檔或者你只關(guān)心第一條數(shù)據(jù)<?php
$obj = $collection->findOne();
var_dump( $obj );
?>
你會看到下列結(jié)果
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儲存元素中以_以及$開頭的都是供內(nèi)部使用的
添加更多文檔為了做一些更有趣的事情,我們添加更多簡單的文檔到集合中,這些文檔如下
<?php
array( “i” => value );
?>我們可以使用循環(huán)相當(dāng)有效的插入數(shù)據(jù)
<?php
for($i=0; $i<100; $i++) {
$collection->insert( array( “i” => $i ) );
}
?>
注意:我們可以插入不同的字段在同一字符集中,在這方面意味著MongoDB擁有非常自由的儲存模式在一個集合中計算文檔的數(shù)量
現(xiàn)在我們插入了101個文檔(我們用循環(huán)插入了100個,之前還插入了一個),我們可以使用count()來看看我們的數(shù)據(jù)是不是都被插入進(jìn)去了
<?php
echo $collection->count();
?>
這段代碼將打印出101
MongoCollection::count() 也可以查詢字段數(shù)據(jù)
使用游標(biāo)得到集合中的所有文檔為了得到集合中的所有文檔,我們可以使用 MongoCollection::find()方法,find()方法返回一個 MongoCursor對象,可以讓我們重復(fù)得到查詢
所匹配的的文檔
<?php
$cursor = $collection->find();
foreach ($cursor as $id => $value) {
echo “$id: “;
var_dump( $value );
}
?>
這樣我們會打印出集合中的這101個文檔,$id就是文檔中的_id字段,$value 就是文檔本身
為查詢規(guī)定一個標(biāo)準(zhǔn)我們可以通過find()方法得到集合中的文檔子集,例如,我們要查詢出集合中i字段為71的文檔,我們可以使用下列方法
<?php$query = array( “i” => 71 );
$cursor = $collection->find( $query );
while( $cursor->hasNext() ) {
var_dump( $cursor->getNext() );
}
?>
我們將打印如下數(shù)據(jù)
array(2) {
["_id"]=>
object(MongoId)#6 (0) {
}
["i"]=>
int(71)
["_ns"]=>
“testCollection”
}
為查詢設(shè)定一個范圍我們可以通過find()創(chuàng)建一個查詢語句以得集合中的一個子集,例如如果我們得到所有”i”>50的文檔,我們可以使用如下代碼
<?php
$query = array( “i” => array(‘$gt’ =>50)); //注意’$gt’兩邊的單引號
$cursor = $coll->find( $query );while( $cursor->hasNext() ) {
var_dump( $cursor->getNext() );
}
?>
我們同樣可以得到20 < i <= 30之間的數(shù)據(jù)
<?php
$query = array( “i” => array( “$gt” => 20, “$lte” => 30 ) );
$cursor = $coll->find( $query );while( $cursor->hasNext() ) {
var_dump( $cursor->getNext() );
}
?>
我們非常容易漏掉$美元符號,你也可以選擇你自定義的符號來代替美元符號,選擇一個不會在你的建里面出現(xiàn)的符號例如”:”,在php.ini中加上這么一句話
mongo.cmd = “:”
那么上面的代碼就可以替換成
<?php
$query = array( “i” => array( “:gt” => 20, “:lte” => 30 ) );
?>
當(dāng)然你也可以使用ini_set(“mongo.cmd”, “:”)的方法來改變
創(chuàng)建一個索引MongoDB支持索引,并且可以很容易的加到一個集合中,你只要指定某個字段為索引就行了,并且還可以指定 正序索引(1)與 倒序索引(-1)
下面的代碼為I創(chuàng)建了索引
<?php
$coll->ensureIndex( array( “i” => 1 ) ); //在”i”上創(chuàng)建了一個索引
$coll->ensureIndex( array( “i” => -1, “j” => 1 ) );//在”i”上創(chuàng)建了倒序索引 在”j”上創(chuàng)建了正序索引
?>
一個簡單的列子這個例子展示了如何鏈接mongodb數(shù)據(jù)庫,如何選擇數(shù)據(jù)庫,如何插入數(shù)據(jù),如何查詢數(shù)據(jù),以及關(guān)閉數(shù)據(jù)庫鏈接<?php
//鏈接
$m = new Mongo();
// 選擇一個數(shù)據(jù)庫
$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();
//重復(fù)顯示結(jié)果
foreach ($cursor as $obj) {
echo $obj["title"] . "
";
}
// 關(guān)閉鏈接
$m->close();
?>輸出結(jié)果為
Calvin and Hobbes
XKCD
注意補充:mongodb數(shù)據(jù)類型控制的很嚴(yán)格,比如字符串的1 和整型的1 在查找時,只能匹配到對應(yīng)的數(shù)據(jù)
當(dāng)前名稱:MongoDB與PHP的添加、修改、查詢、刪除-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://bm7419.com/article42/ceddec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站營銷、域名注冊、面包屑導(dǎo)航、搜索引擎優(yōu)化、Google
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源:
創(chuàng)新互聯(lián)