本文目錄一覽:
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_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; $i100; $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);
//修改
$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
mongodb insert和save的相同點和區別
區別
若新增的數據中存在主鍵 ,insert() 會提示錯誤,而save()
則更改原來的內容為新內容。
如:
已存在數據: {_id : 1, ” name ” : ” n1 ” },再次進行插入操作時,
insert({_id : 1, ” name ” : ” n2 ” }) 會報主鍵重複的錯誤提示
save({ _id : 1, ” name ” : ” n2 ” }) 會把 n1 修改為 n2 。
相同點:
若新增的數據中沒有主鍵時,會增加一條記錄。
已存在數據: { _id : 1, ” name ” : ” n1 ” },再次進行插入操作時,
insert({ ” name ” : ” n2 ” }) 插入的數據因為沒有主鍵,所以會增加一條數據
save({ ” name ” : ” n2 ” })
增加一條數據。
mongodb的save和insert函數的區別
mongodb的save和insert函數都可以向collection里插入數據,但兩者是有兩個區別:
一、使用save函數里,如果原來的對象不存在,那他們都可以向collection里插入數據,如果已經存在,save會調用update更新裡面的記錄,而insert則會忽略操作
二、insert可以一次性插入一個列表,而不用遍歷,效率高, save則需要遍歷列表,一個個插入。
看下這兩個函數的原型就清楚了,直接輸入函數名便可以查看原型,下面標紅的部分就是實現了循環,對於遠程調用來說,是一性次將整個列表post過來讓mongodb去自己處理,效率會高些
db.user.insert
function (obj, _allow_dot) {
if (!obj) {
throw “no object passed to insert!”;
}
if (!_allow_dot) {
this._validateForStorage(obj);
}
if (typeof obj._id == “undefined” !Array.isArray(obj)) {
var tmp = obj;
obj = {_id:new ObjectId};
for (var key in tmp) {
obj[key] = tmp[key];
}
}
this._db._initExtraInfo();
this._mongo.insert(this._fullName, obj);
this._lastID = obj._id;
this._db._getExtraInfo(“Inserted”);
}
db.user.save
function (obj) {
if (obj == null || typeof obj == “undefined”) {
throw “can’t save a null”;
}
if (typeof obj == “number” || typeof obj == “string”) {
throw “can’t save a number or string”;
}
if (typeof obj._id == “undefined”) {
obj._id = new ObjectId;
return this.insert(obj);
} else {
return this.update({_id:obj._id}, obj, true);
}
}
下面是 python里的實現向mongo插入數據的代碼
import pymong
logItems =[]
logItems.append({“url”:”,”time”:0.2})
logItems.append({“url”:”,”time”:0.12})
logItems.append({“url”:”,”time”:0.24})
def addLogToMongo(db,logItems):
#建立一個到mongo資料庫的連接
con = pymongo.MongoClient(db,27017)
#連接到指定資料庫
db = con.my_collection
#直接插入數據,logItems是一個列表變數,可以使用insert直接一次性向mongoDB插入整下列表,如果用save的話,需一使用for來循環一個個插入,效率不高
db.logDetail.insert(logItems)
”’
for url in logItems:
print(str(url))
db.logDetail.save(url)
”’
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/243126.html