解析:使用php mongodb擴(kuò)展時(shí) 需要注意的事項(xiàng)
{ "_id" : ObjectId("504eea97e4b023cf38e34039"), "in_ts" : NumberLong("1347349143699"), "log" : { "guid" : "4D1F3079-7507-F4B0-E7AF-5432D5D8229D", "p" : "View_Prop_YepPage_Zheng", "cid" : "11", "url" : "http://shanghai.haozu.com/rental/broker/n/10481780", "rfpn" : "Listing_V2_IndexPage_All", "site" : "haozu", "agent" : "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)", "stamp" : "1347349162159", "cip" : "116.226.70.44", "referer" : "http://shanghai.haozu.com/shop/1464934/", "cstamp" : "1347349323125", "sessid" : "FA798056-F9E7-F961-41E0-CC95C850FA47", "uguid" : "C00FF55B-3D3D-4B31-4318-12345B0DBE64", "pn" : "View_Prop_YepPage_Zheng", "cstparam" : { "proId" : NumberLong(10481780), "brokerId" : "326792", "tradeType" : "2", "userType" : "0", "channel" : "site", "entry" : "1", "COMMID" : "1666" } }, "out_ts" : NumberLong("1347349466083"), "rule" : 0, "status" : "ok", "txid" : 0 }
后來改成數(shù)字格式:
{ "_id" : ObjectId("504eea97e4b023cf38e34039"), "in_ts" : NumberLong("1347349143699"), "log" : { "guid" : "4D1F3079-7507-F4B0-E7AF-5432D5D8229D", "p" : "View_Prop_YepPage_Zheng", "cid" : "11", "url" : "http://shanghai.haozu.com/rental/broker/n/10481780", "rfpn" : "Listing_V2_IndexPage_All", "site" : "haozu", "agent" : "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)", "stamp" : NumberLong("1347349162159"), "cip" : "116.226.70.44", "referer" : "http://shanghai.haozu.com/shop/1464934/", "cstamp" : "1347349323125", "sessid" : "FA798056-F9E7-F961-41E0-CC95C850FA47", "uguid" : "C00FF55B-3D3D-4B31-4318-12345B0DBE64", "pn" : "View_Prop_YepPage_Zheng", "cstparam" : { "proId" : NumberLong(10481780), "brokerId" : "326792", "tradeType" : "2", "userType" : "0", "channel" : "site", "entry" : "1", "COMMID" : "1666" } }, "out_ts" : NumberLong("1347349466083"), "rule" : 0, "status" : "ok", "txid" : 0 }
為字符串時(shí),使用下面的查詢是正常的
$query = array ('log.stamp' => array ('$gte' => ‘1347346800000', '$lt' => ‘1347350400000'));
但是改為數(shù)字后,使用下面的查詢,死活沒有結(jié)果,但是直接在mongo客戶端直接查詢是有結(jié)果的:
db.haozu_success.find({'log.stamp':{$gte:1347346800000,$lt:1347350400000}})
php手冊(cè)上也是這么個(gè)用法:
$query = array ('log.stamp' => array ('$gte' => 1347346800000, '$lt' => 1347350400000));
花了好大一會(huì)找原因,開始時(shí)懷疑是php擴(kuò)展的bug導(dǎo)致,經(jīng)過一番思考。突然想到可能是類型問題導(dǎo)致,發(fā)現(xiàn)手冊(cè)上有Types 介紹,所以正確的用法如下:
$query = array ('log.stamp' => array ('$gte' => new MongoInt64($time_range['start']), '$lt' => new MongoInt64($time_range['end'])));
另外,在使用mapreduce進(jìn)行數(shù)據(jù)統(tǒng)計(jì)時(shí),為了防止cursor出現(xiàn)超時(shí)異常,還需要設(shè)置一下超時(shí)時(shí)間
$map = new MongoCode ( '
function(){
var prop_id=this.log.cstparam.proId;
var key=this.log.site+prop_id
emit(key,{"channel":this.log.site,"prop_id":prop_id,"count":1});
}
' );
$reduce = new MongoCode ( '
function(key,emits){
var total=0;
for(var i in emits){
total+=emits[i].count;
}
return {"channel":emits[0].channel,"prop_id":eval(emits[0].prop_id),"count":total};
}
' );
$this->mongo_db->command ( array ('mapreduce' => $collection_name, 'map' => $map, 'reduce' => $reduce, 'out' => $tmp_result, 'query' => $query),array('timeout'=>self::MONGO_CURSOR_TIMEOUT) );
- PHP與MongoDB簡(jiǎn)介|安全|M+PHP應(yīng)用實(shí)例詳解
- 作為PHP程序員應(yīng)該了解MongoDB的五件事
- 深入PHP操作MongoDB的技術(shù)總結(jié)
- PHP對(duì)MongoDB[NoSQL]數(shù)據(jù)庫的操作
- php對(duì)mongodb的擴(kuò)展(小試牛刀)
- php對(duì)mongodb的擴(kuò)展(初識(shí)如故)
- php對(duì)mongodb的擴(kuò)展(初出茅廬)
- PHP連接MongoDB示例代碼
- PHP操作MongoDB時(shí)的整數(shù)問題及對(duì)策說明
- 在MongoDB中模擬Auto Increment的php代碼
相關(guān)文章
php模仿asp Application對(duì)象在線人數(shù)統(tǒng)計(jì)實(shí)現(xiàn)方法
這篇文章主要介紹了php模仿asp Application對(duì)象在線人數(shù)統(tǒng)計(jì)實(shí)現(xiàn)方法,通過一個(gè)比較簡(jiǎn)單的自定義函數(shù)實(shí)現(xiàn)這一功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01PHP中 empty() 和 isset() 的區(qū)別介紹
作為PHP中經(jīng)常用來判斷變量是否為空的函數(shù):empty()和isset() ,二者其實(shí)在很多方面還是存在區(qū)別的,本文將為大家詳細(xì)介紹一下他們的區(qū)別之處,需要的朋友可以了解一下2021-12-12php checkdate、getdate等日期時(shí)間函數(shù)操作詳解
PHP的日期時(shí)間函數(shù)date()中介紹了PHP日期時(shí)間函數(shù)的簡(jiǎn)單用法,這類將介紹更多的函數(shù)來豐富我們的應(yīng)用。2010-03-03php實(shí)現(xiàn)mysql連接池效果實(shí)現(xiàn)代碼
這篇文章主要介紹了php代碼實(shí)現(xiàn)mysql連接池效果,需要的朋友可以參考下2018-01-01給PHP開發(fā)者的編程指南 第一部分降低復(fù)雜程度
給PHP開發(fā)者的編程指南,第一部分的內(nèi)容是降低復(fù)雜程度,感興趣的小伙伴們可以參考一下2016-01-01PHP實(shí)現(xiàn)獲取ip地址的5種方法,以及插入用戶登錄日志操作示例
這篇文章主要介紹了PHP實(shí)現(xiàn)獲取ip地址的5種方法,以及插入用戶登錄日志操作,結(jié)合實(shí)例形式總結(jié)分析了php獲取訪客IP地址的5種常見操作方法,以及將用戶登陸信息寫入登陸日志數(shù)據(jù)庫相關(guān)操作技巧,需要的朋友可以參考下2019-02-02PHP實(shí)現(xiàn)獲取第一個(gè)中文首字母并進(jìn)行排序的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)獲取第一個(gè)中文首字母并進(jìn)行排序的方法,涉及php數(shù)組遍歷、編碼轉(zhuǎn)換及數(shù)組排序相關(guān)操作技巧,需要的朋友可以參考下2017-05-05CodeIgniter php mvc框架 中國網(wǎng)站
CodeIgniter 是一個(gè)小巧但功能強(qiáng)大的 PHP 框架,作為一個(gè)簡(jiǎn)單而“優(yōu)雅”的工具包,它可以為 PHP 程序員建立功能完善的 Web 應(yīng)用程序。如果你是一個(gè)使用共享主機(jī),并且為客戶所要求的期限而煩惱的開發(fā)人員,如果你已經(jīng)厭倦了那些傻大笨粗的框架2008-05-05