『壹』 php mongoclient 連接 mongodb ,出現 "No candidate servers found"錯誤。實在沒辦法,求大神們解答。
表標PHP已經自帶了mongo功能,你就可以操作下面的代碼(但是你必須有安裝mongodb伺服器)一、連接資料庫使用下面的代碼創建一個資料庫鏈接復制代碼代碼如下:listDBs());//能列印出資料庫數組,看看有幾個資料庫。?>如圖:上圖說有一個資料庫名字叫local,總大小1個位元組,他是空的。看見ok表示運行成功。現在你可以使用$connection鏈接來操作資料庫了選擇資料庫使用下面的代碼來選擇一個資料庫復制代碼代碼如下:dbname;?>這里的資料庫並不一定是一個已經存在的資料庫,如果所選擇的資料庫不存在,則會新建一個資料庫,所以在選擇資料庫的時候,注意一定要填上正確的資料庫名如果拼寫錯誤的話,很有可能會新建一個資料庫復制代碼代碼如下:mybiglongdbname;//做一些事情$db=$connection->mybiglongdbnme;//現在會連上一個新的資料庫?>獲取一個集合獲取一個集合跟選擇資料庫擁有相同的語法格式復制代碼代碼如下:baz;//選擇資料庫$collection=$db->foobar;//選擇foobar集合//或者使用更簡潔的方式$collection=$connection->baz->foobar;?>插入一個文檔多維數組是可以被儲存到資料庫中的基本單元一個隨機的文檔可能是這樣復制代碼代碼如下:「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()插入一個文檔復制代碼代碼如下:foo->bar;$collection->insert($doc);?>mongodb的insert()、save(),區別主要是:若存在主鍵,insert()不做操作,而save()則更改原來的內容為新內容。存在數據:{_id:1,"name":"n1"}insert({_id:1,"name":"n2"})會提示錯誤save({_id:1,"name":"n2"})會把n1改為n2。使用MongoCollection::findOne()查詢文檔為了證明上面那段代碼的數據已經插入到資料庫里了,我們進行簡單的findOne()操作以得到集合中的第一個文檔數據,這種方法只返回一個文檔數據,這種方法適用於在你的查詢語句的時候只匹配一個文檔或者你只關心第一條數據復制代碼代碼如下:findOne();var_mp($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儲存元素中以_以及$開頭的都是供內部使用的添加文檔為了做一些更有趣的事情,我們添加簡單的文檔到集合中,這些文檔如下復制代碼代碼如下:value);?>我們可以使用循環相當有效的插入數據復制代碼代碼如下:insert(array(「i」=>$i));}?>注意:我們可以插入不同的欄位在同一字元集中,在這方面意味著MongoDB擁有非常自由的儲存模式在一個集合中計算文檔的數量現在我們插入了101個文檔(我們用循環插入了100個,之前還插入了一個),我們可以使用count()來看看我們的數據是不是都被插入進去了復制代碼代碼如下:count();?>這段代碼將列印出101MongoCollection::count()也可以查詢欄位數據使用游標得到集合中的所有文檔為了得到集合中的所有文檔,我們可以使用MongoCollection::find()方法,find()方法返回一個MongoCursor對象,可以讓我們重復得到查詢所匹配的的文檔復制代碼代碼如下:find();foreach($cursoras$id=>$value){echo「$id:「;var_mp($value);}?>這樣我們會列印出集合中的這101個文檔,$id就是文檔中的_id欄位,$value就是文檔本身為查詢規定一個標准我們可以通過find()方法得到集合中的文檔子集,例如,我們要查詢出集合中i欄位為71的文檔,我們可以使用下列方法復制代碼代碼如下:71);$cursor=$collection->find($query);while($cursor->hasNext()){var_mp($cursor->getNext());}?>我們將列印如下數據復制代碼代碼如下:array(2){["_id"]=>object(MongoId)#6(0){}["i"]=>int(71)["_ns"]=>「testCollection」}為查詢設定一個范圍我們可以通過find()創建一個查詢語句以得集合中的一個子集,例如如果我們得到所有」i」>50的文檔,我們可以使用如下代碼復制代碼代碼如下:array(『$gt'=>50));//注意'$gt'兩邊的單引號$cursor=$coll->find($query);while($cursor->hasNext()){var_mp($cursor->getNext());}?>我們同樣可以得到20array(「\$gt」=>20,「\$lte」=>30));$cursor=$coll->find($query);while($cursor->hasNext()){var_mp($cursor->getNext());}?>我們非常容易漏掉$美元符號,你也可以選擇你自定義的符號來代替美元符號,選擇一個不會在你的建裡面出現的符號例如」:」,在php.ini中加上這么一句話復制代碼代碼如下:mongo.cmd=「:」那麼上面的代碼就可以替換成復制代碼代碼如下:array(「:gt」=>20,「:lte」=>30));?>當然你也可以使用ini_set(「mongo.cmd」,「:」)的方法來改變創建一個索引MongoDB支持索引,並且可以很容易的加到一個集合中,你只要指定某個欄位為索引就行了,並且還可以指定正序索引(1)與倒序索引(-1)下面的代碼為I創建了索引復制代碼代碼如下:ensureIndex(array(「i」=>1));//在」i」上創建了一個索引$coll->ensureIndex(array(「i」=>-1,「j」=>1));//在」i」上創建了倒序索引在」j」上創建了正序索引?>一個完整的簡單例子這個例子展示了如何鏈接mongodb資料庫,如何選擇資料庫,如何插入數據,如何查詢數據,以及關閉資料庫鏈接復制代碼代碼如下:comedy;$collection=$db->cartoons;//添加一個元素$obj=array("title"=>"CalvinandHobbes","author"=>"BillWatterson");$collection->insert($obj);//修改$newdata=array('$set'=>array("title"=>"CalvinandHobbes"));$collection->update(array("author"=>"caleng"),$newdata);//刪除$collection->remove(array('author'=>'caleng'),array("justOne"=>true));//添加另一個元素,使用不同的格式$obj=array("title"=>"XKCD","online"=>true);$collection->insert($obj);//查詢所有的集合$cursor=$collection->find();//重復顯示結果foreach($cursoras$obj){echo$obj["title"]."\n";}//關閉鏈接$m->close();?>輸出結果為復制代碼代碼如下:CalvinandHobbesXKCD
『貳』 mongodb 需要close嗎
如果使用驅動操巧散塌作的話是不需要自掘橘己手動close連接的,如果是使用原生操作的孝圓話是需要的,比如nodejs的mongoose驅動不需要,使用mongodb驅動就需要。
『叄』 php 遠程連接Mongodb問題
<?php //這里採用默認連接本機的27017埠,當然你也可以連接遠程主機如192.168.0.4:27017,如果埠是27017,埠可以省略 $m = new Mongo(); // 選擇comedy資料庫,如果以前沒該資料庫會自動創建,也可以用$m->selectDB("comedy"); $db = $m->comedy; //選擇comedy裡面的collection集合,相當於RDBMS裡面的表,也-可以使用 $collection = $db->collection; $db->selectCollection("collection"); //添加一個元素 $obj = array( "title" => "Calvin and Hobbes-".date('i:s'), "author" => "Bill Watterson" ); //將$obj 添加到$collection 集合中 $collection->insert($obj); //添加另一個元素 $obj = array( "title" => "XKCD-".date('i:s'), "online" => true ); $collection->insert($obj); //查詢所有的記錄 $cursor = $collection->find(); //遍歷所有集合中的文檔 foreach ($cursor as $obj) { echo $obj["title"] . "<br />\n"; } //刪除所有數據 //$collection->remove(); //刪除 name 為hm //$collection->remove(array('name'=>'hm')); //斷開MongoDB連接 $m->close(); ?>
你可以去後盾人平台看看,裡面的東西不錯
『肆』 如何為PHP安裝mongodb的擴展
1.首先下載php的mongodb擴展
從http://pecl.php.net/package/mongo這個網址下載mongodb的擴展源碼包
1
wget http://pecl.php.net/get/mongo-1.4.5.tgz
2.解壓安裝包
1
tar zxf mongo-1.4.5.tgz
3.進入解壓目錄,運行phpize進行安裝准備
1
2
cd mongo-1.4.5
/usr/local/php/bin/phpize
4.安裝編譯
上述命令運行完後,在目錄下就生成了configure文件
使用./configure命令進行安裝配置,然後使用make && make install進行編譯安裝,命令如下:
1
2
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
5.編輯php.ini增加下述一行添加mongodb擴展
1
extension=mongo.so
重啟web容器,然後查看phpinfo,看到mongodb的內容就說明安裝成功。
『伍』 mongodb 3.2怎麼在php中連接
表標PHP已經自帶了mongo功能,你就可以操作下面的代碼(但是你必須有安裝mongodb伺服器)
一、連接資料庫
使用下面的代碼創建一個資料庫鏈接
復制代碼 代碼如下:
<?php
$connection = new Mongo(mongodb://192.168.1.5:27017); //鏈接到 192.168.1.5:27017//27017埠是默認的。
$connection = new Mongo( "example.com" ); //鏈接到遠程主機(默認埠)
$connection = new Mongo( "example.com:65432" ); //鏈接到遠程主機的自定義的埠
print_r($connection->listDBs());//能列印出資料庫數組,看看有幾個資料庫。
?>
如圖:
上圖說有一個資料庫名字叫local,總大小1個位元組,他是空的。看見ok表示運行成功。
現在你可以使用$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);
?>
mongodb 的 insert()、save() ,區別主要是:若存在主鍵,insert() 不做操作,而save() 則更改原來的內容為新內容。
存在數據: { _id : 1, " name " : " n1 " }
insert({ _id : 1, " name " : " n2 " }) 會提示錯誤
save({ _id : 1, " name " : " n2 " }) 會把 n1 改為 n2 。
使用MongoCollection::findOne()查詢文檔
為了證明上面那段代碼的數據已經插入到資料庫里了,我們進行簡單的 findOne()操作以得到集合中的第一個文檔數據,這種方法只返回一個文檔數據,
這種方法適用於在你的查詢語句的時候只匹配一個文檔或者你只關心第一條數據
復制代碼 代碼如下:
<?php
$obj = $collection->findOne();
var_mp( $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_mp( $value );
}
?>
這樣我們會列印出集合中的這101個文檔,$id就是文檔中的_id欄位,$value 就是文檔本身
為查詢規定一個標准
我們可以通過find()方法得到集合中的文檔子集,例如,我們要查詢出集合中i欄位為71的文檔,我們可以使用下列方法
復制代碼 代碼如下:
<?php
$query = array( 「i」 => 71 );
$cursor = $collection->find( $query );
while( $cursor->hasNext() ) {
var_mp( $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_mp( $cursor->getNext() );
}
?>
我們同樣可以得到20 < i <= 30之間的數據
復制代碼 代碼如下:
<?php
$query = array( 「i」 => array( 「\$gt」 => 20, 「\$lte」 => 30 ) );
$cursor = $coll->find( $query );
while( $cursor->hasNext() ) {
var_mp( $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);
//修改
$newdata = array('$set' => array("title" => "Calvin and Hobbes"));
$collection->update(array("author" => "caleng"), $newdata);
//刪除
$collection->remove(array('author'=>'caleng'), array("justOne" => true));
//添加另一個元素,使用不同的格式
$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