佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > PHP中MongoDB數(shù)據(jù)庫(kù)的連接、添加、修改、查詢(xún)、刪除等操作實(shí)例

PHP中MongoDB數(shù)據(jù)庫(kù)的連接、添加、修改、查詢(xún)、刪除等操作實(shí)例

熱門(mén)標(biāo)簽:鐵路電話系統(tǒng) 服務(wù)外包 網(wǎng)站排名優(yōu)化 呼叫中心市場(chǎng)需求 AI電銷(xiāo) 百度競(jìng)價(jià)排名 地方門(mén)戶網(wǎng)站 Linux服務(wù)器

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ù)庫(kù)

使用下面的代碼創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)鏈接

復(fù)制代碼 代碼如下:
?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ù)庫(kù)數(shù)組,看看有幾個(gè)數(shù)據(jù)庫(kù)。

?>

如圖:


上圖說(shuō)有一個(gè)數(shù)據(jù)庫(kù)名字叫l(wèi)ocal,總大小1個(gè)字節(jié),他是空的。看見(jiàn)ok表示運(yùn)行成功。

現(xiàn)在你可以使用$connection鏈接來(lái)操作數(shù)據(jù)庫(kù)了

選擇數(shù)據(jù)庫(kù)

使用下面的代碼來(lái)選擇一個(gè)數(shù)據(jù)庫(kù)

復(fù)制代碼 代碼如下:
?php
$db = $connection->dbname;
?>

這里的數(shù)據(jù)庫(kù)并不一定是一個(gè)已經(jīng)存在的數(shù)據(jù)庫(kù),如果所選擇的數(shù)據(jù)庫(kù)不存在,則會(huì)新建一個(gè)數(shù)據(jù)庫(kù),所以在選擇數(shù)據(jù)庫(kù)的時(shí)候,注意一定要填上正確的數(shù)據(jù)庫(kù)名
如果拼寫(xiě)錯(cuò)誤的話,很有可能會(huì)新建一個(gè)數(shù)據(jù)庫(kù)

復(fù)制代碼 代碼如下:
?php
$db = $connection->mybiglongdbname;
//做一些事情
$db = $connection->mybiglongdbnme;
//現(xiàn)在會(huì)連上一個(gè)新的數(shù)據(jù)庫(kù)
?>

獲取一個(gè)集合

獲取一個(gè)集合跟選擇數(shù)據(jù)庫(kù)擁有相同的語(yǔ)法格式

復(fù)制代碼 代碼如下:
?php
$db = $connection->baz;//選擇數(shù)據(jù)庫(kù)
$collection = $db->foobar;//選擇foobar集合
//或者使用更簡(jiǎn)潔的方式
$collection = $connection->baz->foobar;
?>

插入一個(gè)文檔

多維數(shù)組是可以被儲(chǔ)存到數(shù)據(jù)庫(kù)中的基本單元
一個(gè)隨機(jī)的文檔可能是這樣

復(fù)制代碼 代碼如下:
?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ù)組與對(duì)象,對(duì)象與文檔在mongodb中幾乎是一樣的,你可以使用$doc調(diào)用一個(gè)文檔或?qū)ο?,但是info字段總是一個(gè)對(duì)象而不是一個(gè)文檔,
本約束適用于所有文檔
使用MongoCollection::insert()插入一個(gè)文檔

復(fù)制代碼 代碼如下:
?php
$m = new Mongo();
$collection = $m->foo->bar;
$collection->insert($doc);
?>

mongodb 的 insert()、save()  ,區(qū)別主要是:若存在主鍵,insert()  不做操作,而save() 則更改原來(lái)的內(nèi)容為新內(nèi)容。
存在數(shù)據(jù):  { _id : 1, " name " : " n1 " }
insert({ _id : 1, " name " : " n2 " })    會(huì)提示錯(cuò)誤
save({ _id : 1, " name " : " n2 " })     會(huì)把 n1 改為  n2  。

使用MongoCollection::findOne()查詢(xún)文檔

為了證明上面那段代碼的數(shù)據(jù)已經(jīng)插入到數(shù)據(jù)庫(kù)里了,我們進(jìn)行簡(jiǎn)單的 findOne()操作以得到集合中的第一個(gè)文檔數(shù)據(jù),這種方法只返回一個(gè)文檔數(shù)據(jù),
這種方法適用于在你的查詢(xún)語(yǔ)句的時(shí)候只匹配一個(gè)文檔或者你只關(guān)心第一條數(shù)據(jù)

復(fù)制代碼 代碼如下:
?php
$obj = $collection->findOne();
var_dump( $obj );
?>

你會(huì)看到下列結(jié)果

復(fù)制代碼 代碼如下:
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字段自動(dòng)加載了文檔上,MongoDB儲(chǔ)存元素中以_以及$開(kāi)頭的都是供內(nèi)部使用的

添加更多文檔

為了做一些更有趣的事情,我們添加更多簡(jiǎn)單的文檔到集合中,這些文檔如下

復(fù)制代碼 代碼如下:
?php
array( “i” => value );
?>

我們可以使用循環(huán)相當(dāng)有效的插入數(shù)據(jù)
復(fù)制代碼 代碼如下:
?php
for($i=0; $i100; $i++) {
    $collection->insert( array( “i” => $i ) );
}
?>

注意:我們可以插入不同的字段在同一字符集中,在這方面意味著MongoDB擁有非常自由的儲(chǔ)存模式

在一個(gè)集合中計(jì)算文檔的數(shù)量

現(xiàn)在我們插入了101個(gè)文檔(我們用循環(huán)插入了100個(gè),之前還插入了一個(gè)),我們可以使用count()來(lái)看看我們的數(shù)據(jù)是不是都被插入進(jìn)去了

復(fù)制代碼 代碼如下:

?php
echo $collection->count();
?>

這段代碼將打印出101

MongoCollection::count() 也可以查詢(xún)字段數(shù)據(jù)

使用游標(biāo)得到集合中的所有文檔

為了得到集合中的所有文檔,我們可以使用 MongoCollection::find()方法,find()方法返回一個(gè) MongoCursor對(duì)象,可以讓我們重復(fù)得到查詢(xún)所匹配的的文檔

復(fù)制代碼 代碼如下:
?php
$cursor = $collection->find();
foreach ($cursor as $id => $value) {
    echo “$id: “;
    var_dump( $value );
}
?>

這樣我們會(huì)打印出集合中的這101個(gè)文檔,$id就是文檔中的_id字段,$value 就是文檔本身

為查詢(xún)規(guī)定一個(gè)標(biāo)準(zhǔn)
我們可以通過(guò)find()方法得到集合中的文檔子集,例如,我們要查詢(xún)出集合中i字段為71的文檔,我們可以使用下列方法

復(fù)制代碼 代碼如下:
?php
$query = array( “i” => 71 );
$cursor = $collection->find( $query );
while( $cursor->hasNext() ) {
    var_dump( $cursor->getNext() );
}
?>

我們將打印如下數(shù)據(jù)
復(fù)制代碼 代碼如下:
array(2) {
  ["_id"]=>
  object(MongoId)#6 (0) {
  }
  ["i"]=>
  int(71)
  ["_ns"]=>
  “testCollection”
}

為查詢(xún)?cè)O(shè)定一個(gè)范圍

我們可以通過(guò)find()創(chuàng)建一個(gè)查詢(xún)語(yǔ)句以得集合中的一個(gè)子集,例如如果我們得到所有”i”>50的文檔,我們可以使用如下代碼

復(fù)制代碼 代碼如下:
?php
$query = array( “i” => array(‘$gt' =>50)); //注意'$gt'兩邊的單引號(hào)
$cursor = $coll->find( $query );
while( $cursor->hasNext() ) {
    var_dump( $cursor->getNext() );
}
?>

我們同樣可以得到20 i = 30之間的數(shù)據(jù)

復(fù)制代碼 代碼如下:
?php
$query = array( “i” => array( “\$gt” => 20, “\$lte” => 30 ) );
$cursor = $coll->find( $query );
while( $cursor->hasNext() ) {
    var_dump( $cursor->getNext() );
}
?>

我們非常容易漏掉$美元符號(hào),你也可以選擇你自定義的符號(hào)來(lái)代替美元符號(hào),選擇一個(gè)不會(huì)在你的建里面出現(xiàn)的符號(hào)例如”:”,在php.ini中加上這么一句話

復(fù)制代碼 代碼如下:
mongo.cmd = “:”

那么上面的代碼就可以替換成
復(fù)制代碼 代碼如下:
?php
$query = array( “i” => array( “:gt” => 20, “:lte” => 30 ) );
?>

當(dāng)然你也可以使用ini_set(“mongo.cmd”, “:”)的方法來(lái)改變

創(chuàng)建一個(gè)索引

MongoDB支持索引,并且可以很容易的加到一個(gè)集合中,你只要指定某個(gè)字段為索引就行了,并且還可以指定 正序索引(1)與 倒序索引(-1)
下面的代碼為I創(chuàng)建了索引

復(fù)制代碼 代碼如下:
?php
$coll->ensureIndex( array( “i” => 1 ) );  //在”i”上創(chuàng)建了一個(gè)索引
$coll->ensureIndex( array( “i” => -1, “j” => 1 ) );//在”i”上創(chuàng)建了倒序索引 在”j”上創(chuàng)建了正序索引
?>

一個(gè)完整的簡(jiǎn)單例子

這個(gè)例子展示了如何鏈接mongodb數(shù)據(jù)庫(kù),如何選擇數(shù)據(jù)庫(kù),如何插入數(shù)據(jù),如何查詢(xún)數(shù)據(jù),以及關(guān)閉數(shù)據(jù)庫(kù)鏈接

復(fù)制代碼 代碼如下:
?php
//鏈接
$m = new Mongo();

// 選擇一個(gè)數(shù)據(jù)庫(kù)
$db = $m->comedy;
$collection = $db->cartoons;

//添加一個(gè)元素
$obj = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" );
$collection->insert($obj);

//修改
$newdata = array('$set' => array("title" => "Calvin and Hobbes"));
$collection->update(array("author" => "caleng"), $newdata);
//刪除
$collection->remove(array('author'=>'caleng'), array("justOne" => true));

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

//查詢(xún)所有的集合
$cursor = $collection->find();

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

// 關(guān)閉鏈接
$m->close();
?>


輸出結(jié)果為
復(fù)制代碼 代碼如下:
Calvin and Hobbes
XKCD

您可能感興趣的文章:
  • 詳解MongoDB數(shù)據(jù)庫(kù)基礎(chǔ)操作及實(shí)例
  • 老生常談MongoDB數(shù)據(jù)庫(kù)基礎(chǔ)操作
  • mongodb數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)之連表查詢(xún)
  • MongoDB數(shù)據(jù)庫(kù)插入、更新和刪除操作詳解
  • mongodb 數(shù)據(jù)庫(kù)操作詳解--創(chuàng)建,切換,刪除
  • mongodb 數(shù)據(jù)庫(kù)操作--備份 還原 導(dǎo)出 導(dǎo)入
  • MongoDB數(shù)據(jù)庫(kù)文檔操作方法(必看篇)
  • MongoDB模糊查詢(xún)操作案例詳解(類(lèi)關(guān)系型數(shù)據(jù)庫(kù)的 like 和 not like)
  • mongoDB4.0數(shù)據(jù)庫(kù)的操作方法
  • mongodb數(shù)據(jù)庫(kù)入門(mén)學(xué)習(xí)筆記之下載、安裝、啟動(dòng)、連接操作解析
  • MongoDB數(shù)據(jù)庫(kù)安裝配置、基本操作實(shí)例詳解
  • MongoDB數(shù)據(jù)庫(kù)基礎(chǔ)操作總結(jié)

標(biāo)簽:湘潭 仙桃 銅川 湖南 崇左 黃山 衡水 蘭州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP中MongoDB數(shù)據(jù)庫(kù)的連接、添加、修改、查詢(xún)、刪除等操作實(shí)例》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢(xún)

    • 400-1100-266
    承德县| 五台县| 昌宁县| 榆树市| 诸城市| 阳城县| 洞头县| 乐清市| 舟曲县| 浪卡子县| 揭阳市| 军事| 新兴县| 侯马市| 泉州市| 洛扎县| 兴和县| 沅陵县| 富平县| 介休市| 汶上县| 双流县| 宜兰县| 大同县| 广昌县| 安新县| 西城区| 漯河市| 安溪县| 铜陵市| 阿巴嘎旗| 灵宝市| 宜城市| 额敏县| 万载县| 张掖市| 南昌县| 宣武区| 射阳县| 镇平县| 常宁市|