Considerations when using phpmongodb extension _ PHP Tutorial

Source: Internet
Author: User
Notes for using phpmongodb extension. Recently, php's mongo extension was used for data statistics and computation. one of the timestamp fields, accurate to milliseconds, has 13 characters in length, however, at the beginning, data statistics were calculated using the php mongo extension in the form of a string. one of the timestamp fields is accurate to milliseconds and has a length of 13 characters, however, since it was stored as a string at the beginning:
The code is as follows:


{"_ Id": ObjectId ("504eea97e4b023cf38e34039"), "in_ts": NumberLong ("1347349143699"), "log": {"guid": "success ", "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}

Later it was changed to the numeric format:

The code is as follows:

{"_ Id": ObjectId ("504eea97e4b023cf38e34039"), "in_ts": NumberLong ("1347349143699"), "log": {"guid": "success ", "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} is a string, it is normal to use the following query

$ Query = array ('log. stamp' => array ('$ gte' => '000000',' $ lt '=> '000000 '));

After changing to a number, you can use the following query to check whether there is any result. However, you can directly query the result on the mongo client:

The code is as follows:
Db. haozu_success.find ({'log. stamp': {$ gte: 1347346800000, $ lt: 1347350400000 }})

This is also the usage in the php manual:

The code is as follows:
$ Query = array ('log. stamp' => array ('$ gte' => 1347346800000,' $ lt '=> 1347350400000 ));

It took a long time to find out the cause. at first, I suspected it was caused by a bug in php extension. after some thought. Suddenly it may be caused by a type problem, and Types is introduced in the manual, so the correct usage is as follows:

The code is as follows:

$ Query = array ('log. stamp '=> array (' $ gte' => new custom Int64 ($ time_range ['start']), '$ lt' => new bytes Int64 ($ time_range ['end']);

In addition, when using mapreduce for data statistics, to prevent cursor from timeout exceptions, you also need to set the timeout time.

The code is as follows:
$ Map = new response code ('
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 response code ('
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-> sort _db-> command (array ('mapreduce' => $ collection_name, 'map' => $ map, 'reduce' => $ reduce, 'Out' => $ tmp_result, 'query' => $ query), array ('timeout' => self: pai_cursor_timeout ));

The token extension is used for statistical calculation of data. one of the timestamp fields is accurate to milliseconds and has a length of 13 bits. However, the start time is in the form of a string...

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.