在php中使用mongodb扩展时需要注意哪些问题

介绍

本篇文章为大家展示了在php中使用mongodb扩展时需要注意哪些问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

最近在使用php的mongo扩展进行数据统计计算,其中有一个时间戳字段,由于精确到了毫秒,长度有13位,但由于开始的时候是以字符串的形式存储:

代码如下:


{“_id":ObjectId (“504 eea97e4b023cf38e34039"),“in_ts":NumberLong (“1347349143699”),“log":{“guid":“4 d1f3079 - 7507 f4b0 e7af - 5432 d5d8229d",“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 - 3 - d3d 4 b31 - 4318 - 12345 - b0dbe64",“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}


后来改成数字格式:

代码如下:


{“_id":ObjectId (“504 eea97e4b023cf38e34039"),“in_ts":NumberLong (“1347349143699”),“log":{“guid":“4 d1f3079 - 7507 f4b0 e7af - 5432 d5d8229d",“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 - 3 - d3d 4 b31 - 4318 - 12345 - b0dbe64",“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}


为字符串时,使用下面的查询是正常的

代码如下:


查询美元=数组(& # 39;log.stamp& # 39;=比;数组(& # 39;美元gte # 39;=比;“1347346800000 & # 39;& # 39;$ lt # 39;=比;“1347350400000 & # 39;));


但是改为数字后,使用下面的查询,死活没有结果,但是直接在mongo客户端直接查询是有结果的:

代码如下:


db.haozu_success.find ({& # 39; log.stamp& # 39;: {$ gte: 1347346800000, $ lt: 1347350400000}})


php手册上也是这么个用法:

代码如下:


$查询=阵列(& # 39;log.stamp& # 39;=比;数组(& # 39;美元gte # 39;=比;1347346800000,& # 39;$ lt # 39;=比;1347350400000));


花了好大一会找原因,开始时怀疑是php扩展的错误导致,经过一番思考。突然想到可能是类型问题导致,发现手册上有类型介绍,所以正确的用法如下:

代码如下:


查询美元=数组(& # 39;log.stamp& # 39;=比;数组(& # 39;美元gte # 39;=比;新MongoInt64 ($ time_range[& # 39;开始# 39;]),& # 39;$ lt # 39;=比;新MongoInt64 ($ time_range[& # 39;结束# 39;]))),


另外,在使用mapreduce进行数据统计时,为了防止光标出现超时异常,还需要设置一下超时时间

代码如下:


地图美元=new MongoCode (& # 39;
,,,,,,,,,,,,,,,函数(){
,,,,,,,,,,,,,,,,,,,var prop_id=this.log.cstparam.proId;
,,,,,,,,,,,,,,,,,,,var关键=this.log.site + prop_id
,,,,,,,,,,,,,,,,,,,发出(键,{“channel": this.log.site,“prop_id": prop_id,“count": 1});
,,,,,,,,,,,,,,,}
,,,,,,,,,,,,,,,& # 39;);
,,,,,,,null

在php中使用mongodb扩展时需要注意哪些问题