當前位置:首頁 » 編程語言 » php7mongo

php7mongo

發布時間: 2022-06-08 06:30:25

1. php mongodb 多個伺服器 replset的問題

用@抑制警告信息。這個信息不是致命的,直接抑制顯示就行了。

2. php鏈接mongodb

說一下我看到的代碼,你display()裡面可以寫上自己要展現的模板地址。

報錯報的是沒有寫許可權。說明你沒有給這個文件寫許可權,所以無法創建緩存目錄和寫入緩存文件。你上傳到了伺服器上,直接用伺服器Ip打開。

3. 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

4. PHP DUXCMS如何開啟頁面緩存

1.頁面緩存。頁面緩存指之前載入過的頁面以文件方式緩存在伺服器中,在一段時間內再次載入相同頁面時無需重新執行頁面邏輯直接載入靜態頁面。rubyPHP的頁面緩存是自動進行的,在config/tpl.php中可配置是否啟用緩存以及緩存文件的有效期。當然這僅僅是全局設置,在調用視圖時可重新指定是否啟用緩存以及緩存有效期。

2.sql緩存。sql緩存指之前執行過的查詢sql語句以及他的結果緩存在內存中,在一段時間內用相同的sql語句執行查詢操作時不經過資料庫直接返回內存中數據。rubyPHP使用Redis以鍵值方式緩存sql語句以及他的對應結果。rubyPHP能夠在php7上完美運行。(附:關於windows php7 redis 擴展的下載參照我的另一篇博客:http://blog.csdn.net/fanghailiang2016/article/details/51396649)。rubyPHP重寫了mysql_query以及mongo_query方法,在執行查詢sql查詢語句時會優先載入未過期的緩存數據。與頁面緩存類似,sql緩存的全局配置路徑為config/redis.php,在具體執行sql語句前可重新執行是否使用緩存以及緩存有效期。

3.讀寫分離。讀寫分離是建立在主從同步基礎上為了減輕伺服器壓力,將查詢語句轉移到從伺服器上執行的解決方案。rubyPHP重寫了mysql_query,mongo_query函數,除了對查詢語句進行內存級緩存的優化,同時也將查詢語句放到了從伺服器上執行。mysql的主從配置文件路徑為config/mysql.php。

4.html壓縮。html壓縮配合頁面緩存,前者降低了伺服器端壓力,後者減少了輸出內容所佔空間,將html文件中的空格換行等進行壓縮,減少了輸出文件的大小,在一定程度上保護了html的安全。

rubyPHP在代碼結構上模仿CI,在功能上模仿thinkPHP。

rubyPHP的功能包含以下幾方面:

1.使用了thinkPHP的M方法操作資料庫。對於一些簡單的sql語句無需手工寫,用熟悉的M()->where()->limit()->find()這樣的語法即可完成。曾經面試有人問我為什麼thinkPHP的M方法能夠進行連續操作,現在終於明白是使用了單利模式。

2.屏蔽了資料庫的差異。M方法的另一個優點是用來組件sql語句,對高層屏蔽資料庫差異。當然,對於復雜的查詢,M方法是做不到的,此時可以使用已被重寫過的mysql_query以及mongo_query執行你的sql語句。

3.自定義路由。這一點模仿了CI的route.php,將url同控制器的映射關系寫到一個配置文件里。

不足之處:

view文件不支持變數循環輸出。目前的解決方案是使用angularjs調用介面在頁面輸出內容。框架示常式序便是一個使用angularjs的和bootstrap的界面。

5. 求助php7 mongodb 連接數太大問題

mongodb最大的連接數是819,在啟動裡面加參數 --maxConns=3000重啟mongodb服務

6. 求助安裝 php mongo 擴展

Windows安裝PHP MongoDB擴展
本文將講述一下在Wamp環境下安裝MongoDB擴展的過程,大家可以略作參考
Linux 版本的可以參考之前發布的Linux安裝PHP MongoDB擴展
安裝環境
系統環境:Windows 7 64位
Apache版本:2.4.9
PHP版本:5.5.12
MongoDB版本:3.2.6
Wamp版本:wamp 2.5 64位
在windows下安裝mongodb的擴展比Linux環境稍微復雜點
安裝步驟
一、確定php的compiler
通過查看phpinfo()可以確定
可以看到,Compiler是VC11
二、確定php是否是線程安全版本
通過查看phpinfo()可以確定
如果是enabled,則說明是Thread safety版本
三、下載對應的php-mongodb版本
根據前面所得到的信息,需要下載同時符合php5.5,VC11,ts(thread safety),64位的擴展
一般來說,官網的資料是最新和最全的,推薦到官網去下載。下載地址是:http://windows.php.net/downloads/pecl/releases/mongo/。我選擇的是1.6.10版本的
下載php_mongo-1.6.10-5.5-ts-vc11-x64.zip回來,把裡面的php-mongo.dll復制到php的插件目錄下,我本機是:D:\wamp\bin\php\php5.5.12\ext
四、在系統環境變數中加入libsasl.dll的所在路徑
根據http://php.net/manual/en/mongo.installation.php的介紹,安裝mongo擴展需要依賴libsasl.dll, 所以要在系統環境變數中加入該目錄。該目錄一般是php的根目錄。在wamp 2.5下,如果wamp的安裝盤是D盤,該目錄的位置大概是D:\wamp\bin\php\php5.5.12
五、在php.ini中加入extension=php_mongo.dll
extension=php_mongo.dll這行字需要根據實際情況,有些是extension=php_mongodb.dll,取決於D:\wamp\bin\php\php5.5.12\ext目錄中mongo擴展的名字。
注意:wamp中一般有兩個php.ini文件,一個是位於php的根目錄下,一個是apache的根目錄下,需要添加的是apache根目錄下的php.ini。
六、重啟wamp服務
最好是完全退出後再打開
最後,上圖體驗一下安裝後的美妙時刻。
安裝成功後,查看phpinfo版面,會有以下內容顯示。
至此, Windows 下添加php mongo擴展成功結束。

7. mongodb 請問php中的這句mysql語法,在mongodb中如何寫。

查詢:
MySQL:
SELECT * FROM user
Mongo:
db.user.find()
MySQL:
SELECT * FROM user WHERE name = 'starlee'
Mongo:
db.user.find({『name' : 'starlee'})
插入:
MySQL:
INSERT INOT user (`name`, `age`) values ('starlee',25)
Mongo:
db.user.insert({『name' : 'starlee', 『age' : 25})
如果你想在MySQL里添加一個欄位,你必須:
ALTER TABLE user….
但在MongoDB里你只需要:
db.user.insert({『name' : 'starlee', 『age' : 25, 『email' : '[email protected]'})
刪除:
MySQL:
DELETE * FROM user
Mongo:
db.user.remove({})
MySQL:
DELETE FROM user WHERE age < 30
Mongo:
db.user.remove({『age' : {$lt : 30}})
$gt : > ; $gte : >= ; $lt : < ; $lte : <= ; $ne : !=
更新:
MySQL:
UPDATE user SET `age` = 36 WHERE `name` = 'starlee'
Mongo:
db.user.update({『name' : 'starlee'}, {$set : {『age' : 36}})
MySQL:
UPDATE user SET `age` = `age` + 3 WHERE `name` = 'starlee'
Mongo:
db.user.update({『name' : 'starlee'}, {$inc : {『age' : 3}})
MySQL:
SELECT COUNT(*) FROM user WHERE `name` = 'starlee'
Mongo:
db.user.find({『name' : 'starlee'}).count()
MySQL:
SELECT * FROM user limit 10,20
Mongo:
db.user.find().skip(10).limit(20)
MySQL:
SELECT * FROM user WHERE `age` IN (25, 35,45)
Mongo:
db.user.find({『age' : {$in : [25, 35, 45]}})
MySQL:
SELECT * FROM user ORDER BY age DESC
Mongo:
db.user.find().sort({『age' : -1})
MySQL:
SELECT DISTINCT(name) FROM user WHERE age > 20
Mongo:
db.user.distinct(『name', {『age': {$lt : 20}})
MySQL:
SELECT name, sum(marks) FROM user GROUP BY name
Mongo:
db.user.group({
key : {『name' : true},
cond: {『name' : 『foo'},
rece: function(obj,prev) { prev.msum += obj.marks; },
initial: {msum : 0}
});
MySQL:
SELECT name FROM user WHERE age < 20
Mongo:
db.user.find(『this.age < 20′, {name : 1})
發現很多人在搜MongoDB循環插入數據,下面把MongoDB循環插入數據的方法添加在下面:
for(var i=0;i<100;i++)db.test.insert({uid:i,uname:'nosqlfan'+i});
上面一次性插入一百條數據,大概結構如下:
{ 「_id」 : ObjectId(「4c876e519e86023a30dde6b8″), 「uid」 : 55, 「uname」 : 「nosqlfan55″ }
{ 「_id」 : ObjectId(「4c876e519e86023a30dde6b9″), 「uid」 : 56, 「uname」 : 「nosqlfan56″ }
{ 「_id」 : ObjectId(「4c876e519e86023a30dde6ba」), 「uid」 : 57, 「uname」 : 「nosqlfan57″ }
{ 「_id」 : ObjectId(「4c876e519e86023a30dde6bb」), 「uid」 : 58, 「uname」 : 「nosqlfan58″ }
{ 「_id」 : ObjectId(「4c876e519e86023a30dde6bc」), 「uid」 : 59, 「uname」 : 「nosqlfan59″ }
{ 「_id」 : ObjectId(「4c876e519e86023a30dde6bd」), 「uid」 : 60, 「uname」 : 「nosqlfan60″ }
簡易對照表
SQL Statement Mongo Query Language Statement
CREATE TABLE USERS (a Number, b Number) implicit; can be done explicitly
INSERT INTO USERS VALUES(1,1) db.users.insert({a:1,b:1})
SELECT a,b FROM users db.users.find({}, {a:1,b:1})
SELECT * FROM users db.users.find()
SELECT * FROM users WHERE age=33 db.users.find({age:33})
SELECT a,b FROM users WHERE age=33 db.users.find({age:33}, {a:1,b:1})
SELECT * FROM users WHERE age=33 ORDER BY name db.users.find({age:33}).sort({name:1})
SELECT * FROM users WHERE age>33 db.users.find({'age':{$gt:33}})})
SELECT * FROM users WHERE age<33 db.users.find({'age':{$lt:33}})})
SELECT * FROM users WHERE name LIKE "%Joe%" db.users.find({name:/Joe/})
SELECT * FROM users WHERE name LIKE "Joe%" db.users.find({name:/^Joe/})
SELECT * FROM users WHERE age>33 AND age<=40 db.users.find({'age':{$gt:33,$lte:40}})})
SELECT * FROM users ORDER BY name DESC db.users.find().sort({name:-1})
CREATE INDEX myindexname ON users(name) db.users.ensureIndex({name:1})
CREATE INDEX myindexname ON users(name,ts DESC) db.users.ensureIndex({name:1,ts:-1})
SELECT * FROM users WHERE a=1 and b='q' db.users.find({a:1,b:'q'})
SELECT * FROM users LIMIT 10 SKIP 20 db.users.find().limit(10).skip(20)
SELECT * FROM users WHERE a=1 or b=2 db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } )
SELECT * FROM users LIMIT 1 db.users.findOne()
EXPLAIN SELECT * FROM users WHERE z=3 db.users.find({z:3}).explain()
SELECT DISTINCT last_name FROM users db.users.distinct('last_name')
SELECT COUNT(*y) FROM users db.users.count()
SELECT COUNT(*y) FROM users where AGE > 30 db.users.find({age: {'$gt': 30}}).count()
SELECT COUNT(AGE) from users db.users.find({age: {'$exists': true}}).count()
UPDATE users SET a=1 WHERE b='q' db.users.update({b:'q'}, {$set:{a:1}}, false, true)
UPDATE users SET a=a+2 WHERE b='q' db.users.update({b:'q'}, {$inc:{a:2}}, false, true)
DELETE FROM users WHERE z="abc" db.users.remove({z:'abc'});
###################################################
一、操作符
操作符相信大家肯定都知道了,就是等於、大於、小於、不等於、大於等於、小於等於,但是在mongodb里不能直接使用這些操作符。在mongodb里的操作符是這樣表示的:
(1) $gt > (大於)
(2) $lt< (小於)
(3) $gte>= (大於等於)
(4) $lt<= (小於等於)
(5) $ne!= (不等於)
(6) $inin (包含)
(7) $ninnot in (不包含)
(8) $existsexist (欄位是否存在)
(9) $inc對一個數字欄位field增加value
(10) $set就是相當於sql的set field = value
(11) $unset就是刪除欄位
(12) $push把value追加到field裡面去,field一定要是數組類型才行,如果field不存在,會新增一個數組類型加進去
(13) $pushAll同$push,只是一次可以追加多個值到一個數組欄位內
(14) $addToSet增加一個值到數組內,而且只有當這個值不在數組內才增加。
(15) $pop刪除最後一個值:{ $pop : { field : 1 } }刪除第一個值:{ $pop : { field : -1 } }注意,只能刪除一個值,也就是說只能用1或-1,而不能用2或-2來刪除兩條。mongodb 1.1及以後的版本才可以用
(16) $pull從數組field內刪除一個等於value值
(17) $pullAll同$pull,可以一次刪除數組內的多個值
(18) $ 操作符是他自己的意思,代表按條件找出的數組裡面某項他自己。這個比較坳口,就不說了。
二、CURD 增、改、讀、刪
增加

復制代碼代碼如下:

db.collection->insert({'name' => 'caleng', 'email' => 'admin#admin.com'});

是不是灰常簡單呀,對就是這么簡單,它沒有欄位的限制,你可以隨意起名,並插入數據

復制代碼代碼如下:

db.collection.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } ); 只更新了第一條大於1記錄
db.collection.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true ); 大於3的記錄 全更新了
db.collection.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false ); 大於4的記錄 只加進去了第一條
db.collection.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true ); 大於5的記錄 全加進去

查詢

復制代碼代碼如下:

db.collection.find(array('name' => 'ling'), array('email'=>'[email protected]'))
db.collection.findOne(array('name' => 'ling'), array('email''[email protected]'))

大家可以看到查詢我用了兩種不同的寫法,這是為什麼,其實這跟做菜是一樣的,放不同的調料,炒出的菜是不同的味道。下面給大家說一下,這兩種調料的不同作用。
findOne()只返回一個文檔對象,find()返回一個集合列表。
也就是說比如,我們只想查某一條特定數據的詳細信息的話,我們就可以用findOne();
如果想查詢某一組信息,比如說一個新聞列表的時候,我們就可以作用find();
那麼我想大家這時一定會想到我想對這一個列表排序呢,no problem mongodb會為您全心全意服務

復制代碼代碼如下:

db.collection.find().sort({age:1}); //按照age正序排列
db.collection.find().sort({age:-1}); //按照age倒序排列
db.collection.count(); //得到數據總數
db.collection.limit(1); //取數據的開始位置
db.collection.skip(10); //取數據的結束位置
//這樣我們就實現了一個取10條數據,並排序的操作。

刪除
刪除有兩個操作 remove()和drop()

復制代碼代碼如下:

db.collection.remove({"name",'jerry'}) //刪除特定數據
db.collection.drop() //刪除集合內的所有數據

distinct操作

復制代碼代碼如下:

db.user.distinct('name', {'age': {$lt : 20}})

2. 熟悉MongoDB的數據操作語句,類sql
資料庫操作語法
mongo --path
db.AddUser(username,password) 添加用戶
db.auth(usrename,password) 設置資料庫連接驗證
db.cloneDataBase(fromhost) 從目標伺服器克隆一個資料庫
db.commandHelp(name) returns the help for the command
db.Database(fromdb,todb,fromhost) 復制資料庫fromdb---源資料庫名稱,todb---目標資料庫名稱,fromhost---源資料庫伺服器地址
db.createCollection(name,{size:3333,capped:333,max:88888}) 創建一個數據集,相當於一個表
db.currentOp() 取消當前庫的當前操作
db.dropDataBase() 刪除當前資料庫
db.eval(func,args) run code server-side
db.getCollection(cname) 取得一個數據集合,同用法:db['cname'] or db.cname
db.getCollenctionNames() 取得所有數據集合的名稱列表
db.getLastError() 返回最後一個錯誤的提示消息
db.getLastErrorObj() 返回最後一個錯誤的對象
db.getMongo() 取得當前伺服器的連接對象get the server connection object
db.getMondo().setSlaveOk() allow this connection to read from then nonmaster membr of a replica pair
db.getName() 返回當操作資料庫的名稱
db.getPrevError() 返回上一個錯誤對象
db.getProfilingLevel() ?什麼等級
db.getReplicationInfo() ?什麼信息
db.getSisterDB(name) get the db at the same server as this onew
db.killOp() 停止(殺死)在當前庫的當前操作
db.printCollectionStats() 返回當前庫的數據集狀態
db.printReplicationInfo()
db.printSlaveReplicationInfo()
db.printShardingStatus() 返回當前資料庫是否為共享資料庫
db.removeUser(username) 刪除用戶
db.repairDatabase() 修復當前資料庫
db.resetError()
db.runCommand(cmdObj) run a database command. if cmdObj is a string, turns it into {cmdObj:1}
db.setProfilingLevel(level) 0=off,1=slow,2=all
db.shutdownServer() 關閉當前服務程序
db.version() 返回當前程序的版本信息
數據集(表)操作語法
db.linlin.find({id:10}) 返回linlin數據集ID=10的數據集
db.linlin.find({id:10}).count() 返回linlin數據集ID=10的數據總數
db.linlin.find({id:10}).limit(2) 返回linlin數據集ID=10的數據集從第二條開始的數據集
db.linlin.find({id:10}).skip(8) 返回linlin數據集ID=10的數據集從0到第八條的數據集
db.linlin.find({id:10}).limit(2).skip(8) 返回linlin數據集ID=1=的數據集從第二條到第八條的數據
db.linlin.find({id:10}).sort() 返回linlin數據集ID=10的排序數據集
db.linlin.findOne([query]) 返回符合條件的一條數據
db.linlin.getDB() 返回此數據集所屬的資料庫名稱
db.linlin.getIndexes() 返回些數據集的索引信息
db.linlin.group({key:...,initial:...,rece:...[,cond:...]})
db.linlin.mapRece(mayFunction,receFunction,<optional params>)
db.linlin.remove(query) 在數據集中刪除一條數據
db.linlin.renameCollection(newName) 重命名些數據集名稱
db.linlin.save(obj) 往數據集中插入一條數據
db.linlin.stats() 返回此數據集的狀態
db.linlin.storageSize() 返回此數據集的存儲大小
db.linlin.totalIndexSize() 返回此數據集的索引文件大小
db.linlin.totalSize() 返回些數據集的總大小
db.linlin.update(query,object[,upsert_bool]) 在此數據集中更新一條數據
db.linlin.validate() 驗證此數據集
db.linlin.getShardVersion() 返回數據集共享版本號

8. PHP連接mongodb資料庫,登陸後想顯示登錄人的用戶名,為什麼現在顯示1

方法如下:
創建資料庫
use tt
這樣就創建了一個資料庫,如果什麼都不操作離開的話,這個庫就會被系統刪除.所以還要執行下面的命令:
db.usr.insert({'name':'tompig'});
db.usr.insert({'name':'tompig1','id':1});
隨便整了2個表,這個無所謂的,反正要導入表的話就刪除掉這2個就可以了,目前只是想讓資料庫保持住.
然後使用命令查看是否有保存tt這個資料庫:
show dbs
3.配置用戶
use tt
db.addUser('mongodb','123456');
mongodb是用戶名,123456是密碼.
好了,這樣一個資料庫和對這個資料庫配置用戶就完成了.
mongodb常用命令:
1、Help查看命令提示
help
db.help();
db.yourColl.help();
db.youColl.find().help();
rs.help();
2、切換/創建資料庫
use yourDB; 當創建一個集合(table)的時候會自動創建當前資料庫
3、查詢所有資料庫
show dbs;
4、刪除當前使用資料庫
db.dropDatabase();
5、從指定主機上克隆資料庫
db.cloneDatabase(「127.0.0.1」); 將指定機器上的資料庫的數據克隆到當前資料庫
6、從指定的機器上復制指定資料庫數據到某個資料庫
db.Database("mydb", "temp", "127.0.0.1");將本機的mydb的數據復制到temp資料庫中
7、修復當前資料庫
db.repairDatabase();
8、查看當前使用的資料庫
db.getName();
db; db和getName方法是一樣的效果,都可以查詢當前使用的資料庫
9、顯示當前db狀態
db.stats();
10、當前db版本
db.version();
11、查看當前db的鏈接機器地址
db.getMongo();
Collection聚集集合
1、創建一個聚集集合(table)
db.createCollection(「collName」, {size: 20, capped: 5, max: 100});
2、得到指定名稱的聚集集合(table)
db.getCollection("account");
3、得到當前db的所有聚集集合
db.getCollectionNames();
4、顯示當前db所有聚集索引的狀態
db.printCollectionStats();
用戶相關
1、添加一個用戶
db.addUser("name");
db.addUser("userName", "pwd123", true); 添加用戶、設置密碼、是否只讀
2、資料庫認證、安全模式
db.auth("userName", "123123");
3、顯示當前所有用戶
show users;
4、刪除用戶
db.removeUser("userName");
其他
1、查詢之前的錯誤信息
db.getPrevError();
2、清除錯誤記錄
db.resetError();

9. php mongo條件有and和or時應該怎樣寫

mongo操作
find方法

db.collection_name.find();

查詢所有的結果:

select * from users;

db.users.find();

指定返回那些列(鍵):

select name, skills from users;

db.users.find({}, {'name' : 1, 'skills' : 1});

補充說明: 第一個{} 放where條件 第二個{} 指定那些列顯示和不顯示 (0表示不顯示 1表示顯示)

where條件:

1.簡單的等於:

select name, age, skills from users where name = 'hurry';

db.users.find({'name' : 'hurry'},{'name' : 1, 'age' : 1, 'skills' : 1});

2.使用and

select name, age, skills from users where name = 'hurry' and age = 18;

db.users.find({'name' : 'hurry', 'age' : 18},{'name' : 1, 'age' : 1, 'skills' : 1});

3.使用or

select name, age, skills from users where name = 'hurry' or age = 18;

db.users.find({ '$or' : [{'name' : 'hurry'}, {'age' : 18}] },{'name' : 1, 'age' : 1, 'skills' : 1});

4.<, <=, >, >= ($lt, $lte, $gt, $gte )

select * from users where age >= 20 and age <= 30;

db.users.find({'age' : {'$gte' : 20, '$lte' : 30}});

5.使用in, not in ($in, $nin)

select * from users where age in (10, 22, 26);

db.users.find({'age' : {'$in' : [10, 22, 26]}});

6.匹配null

select * from users where age is null;

db.users.find({'age' : null);

7.like (mongoDB 支持正則表達式)

select * from users where name like "%hurry%";

db.users.find({name:/hurry/});

select * from users where name like "hurry%";

db.users.find({name:/^hurry/});

8.使用distinct

select distinct (name) from users;

db.users.distinct('name');

9.使用count

select count(*) from users;

db.users.count();

10.數組查詢 (mongoDB自己特有的)

如果skills是 ['java','python']

db.users.find({'skills' : 'java'}); 該語句可以匹配成功

$all

db.users.find({'skills' : {'$all' : ['java','python']}}) skills中必須同時包含java 和 python

$size

db.users.find({'skills' : {'$size' : 2}}) 遺憾的是$size不能與$lt等組合使用

$slice

db.users.find({'skills' : {'$slice : [1,1]}})

兩個參數分別是偏移量和返回的數量

11.查詢內嵌文檔

12.強大的$where查詢

db.foo.find();
{ "_id" : ObjectId("4e17ce0ac39f1afe0ba78ce4"), "a" : 1, "b" : 3, "c" : 10 }
{ "_id" : ObjectId("4e17ce13c39f1afe0ba78ce5"), "a" : 1, "b" : 6, "c" : 6 }

如果要查詢 b = c 的文檔怎麼辦?

> db.foo.find({"$where":function(){

for(var current in this){
for(var other in this){
if(current != other && this[current] == this[other]){
return true;
}
}
}
return false;

}});

{ "_id" : ObjectId("4e17ce13c39f1afe0ba78ce5"), "a" : 1, "b" : 6, "c" : 6 }

10. php7 mongodb 擴展 真的很差嗎

MongoDB\Driver\Manager::executeBulkWrite
這玩意還配置了一個巨大的類庫來配合調用:就是這個:https://github.com/mongodb/mongo-php-library ,純粹是脫褲子放P,多此一舉,本來原生擴展就已經巨長、巨難用,還配一個根本沒有簡化任何代碼的庫有什麼意義?甚至於調用這個類庫比原生的名字更長、更啰嗦,而且多了一層封裝就多一次bug機會。
這個庫文件總共63個,看看,如果你隨便寫個腳本訪問一下mongodb,還得包含63個文件,我TM整個項目都沒有63個文件好不好?這些個寫慣了java的沒事就老老實實寫java,都跑來寫php,php是要解析執行的,又不像jvm那麼編譯優化執行,搞那麼多文件,不影響執行速度嗎?真是狗屎,所以完全不推薦用這個狗屎庫。
但是這個擴展最奇怪的就是文檔超級簡陋,根本不能獲得任何有價值的信息,所以只能靠摸索來了。
下面是我用到的由MongoClient遷移到MongoDB\Driver的差異點。
MongoClient插入或更新是同樣的代碼:
(new MongoClient())->{$db}->{$collection}->save($arr);
// 這個$arr數組可以直接含有 "_id" 索引來指定 mongodb文檔的_id值,就這么簡單粗暴,這才是php啊!
MongoDB\Driver,插入和更新需要區分:
$mongo = new MongoDB\Driver\Manager();
$bulk = new MongoDB\Driver\BulkWrite(['ordered' => true]);
$data = $mongo->executeQuery('db.collection', new MongoDB\Driver\Query([]), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED))->toArray();
if (empty($data[0])) { // 確定不存在,插入
$bulk->insert($arr);
} else { // 否者更新
$bulk->update([], array('$set' => $arr)); // $arr同樣是剛才的數組
}
// 還沒完,還要執行下一步:db.collection要替換成實際的資料庫、集合名
$result = $mongo->executeBulkWrite('db.collection', $bulk, new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000));
// 返回插入或更新是否成功:
$ok = $result->getInsertedCount() || $result->getModifiedCount() ? 1 : 0;
// 真是夠了!
查詢一條記錄:
MongoClient:
(new MongoClient())->{$db}->{$collection}->findOne(['_id' => $id]);
MongoDB\Driver:
$mongo = new MongoDB\Driver\Manager();
$result = $mongo->executeQuery('db.collection', new MongoDB\Driver\Query(['_id'=>$id], []), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED));
// 返回的$result是一個對象,需要手動轉換成數組。
查詢數量時候,需要注意:
$mongo = new MongoDB\Driver\Manager();
$cursor = $mongo-executeCommand($db, new MongoDB\Driver\Command($arr), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARY_PREFERRED));
// 這里$cursor是一個游標。需要注意$arr里的欄位:
$arr = ['count'=>$collection, 'query'=>$query]; // 這里count必須排在前面,位置反了直接報異常。
查詢結果集:
$mongo = new MongoDB\Driver\Manager();
$cursor = $mongo->executeQuery('db.collection', new MongoDB\Driver\Query($arr, $opts), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED));
//注意,這里的 $arr和 $opts;
$arr = ['_id'=> ['$in'=> $ids] ]; // 根據id數組獲取集合
$opts = ['limit'=> $limit, 'skip'=> $skip ]; // 不推薦
// 這里在傳遞$limit和$skip的時候,最好先轉成整數,不然不生效:
$opts = ['limit'=> (int) $limit, 'skip'=> (int) $skip ]; // 推薦寫法。
// 寫到這里,讓人懷疑是不是在用php了,怎麼還需要這樣的類型轉換。字元串整數都不行!
基本就這樣,推薦自己封裝一個簡單的MongoDB\Driver,而不是使用那個巨大無比的庫、也不推薦直接用原生

熱點內容
大唐無雙冒險腳本 發布:2025-02-08 11:08:36 瀏覽:759
什麼安卓手機可以用個兩三年 發布:2025-02-08 11:02:37 瀏覽:967
安卓收銀軟體哪個好用 發布:2025-02-08 11:01:44 瀏覽:171
實現秘聞存儲的方法 發布:2025-02-08 10:23:33 瀏覽:168
怎麼在微信發文件夾 發布:2025-02-08 10:09:45 瀏覽:795
cryengine源碼 發布:2025-02-08 09:50:58 瀏覽:394
aardio可以反編譯嗎 發布:2025-02-08 09:50:53 瀏覽:484
公司營業執照密碼是什麼 發布:2025-02-08 09:47:56 瀏覽:855
體驗腳本 發布:2025-02-08 09:46:15 瀏覽:691
醫學生需要什麼配置的筆記本 發布:2025-02-08 09:45:34 瀏覽:772