我有以下代码来查询mongo数据库以获取历史数据:
function get_location_history($location)
{
global $m, $db;
$collection = $db->location_ppg_history;
try{
$query = array('tname'=>$location);
$cursor = $collection->find($query)->sort(['ppg_run_date'=>-1]);
return $cursor;
} catch(MongoCursorException $e) {
return false;
}
}
这是对上述方法的调用......以及解析结果的逻辑:
$status = get_location_history($tname);
foreach ($status as $id=>$value) {
..... echo ("<td>".$value['ppg_run_date']."</td>");
}
页面上的输出如下所示:(只是输出的一个子集,可以给你一个想法)
September 27 2016 16:08:47
September 19 2016 9:31:40
September 12 2016 9:23:43
September 05 2016 9:34:44
October 10 2016 9:35:33
October 03 2016 9:41:54
在每个月内,正如您所看到的,它按降序打印日期,这就是我想要的。但我无法弄清楚为什么9月数据会在10月之前返回。
有什么建议吗?
编辑1
这就是我在数据库中的数据:
{
"_id" : ObjectId("57b2283aea89161b704c8980"),
"tname" : "t144f",
"ppg_run_date" : "August 15 2016 15:16:17",
"ppg_log_date" : "August 15 2016 20:38:17",
"type" : "locstatus",
"customized" : true
}
编辑2
这是创建日期字段的PHP代码......
$GLOBALS['gstrPPGRunDate'] = date('F d Y G:i:s', strtotime($matches[2]) );
最终,此Global变量将插入到表示单个文档的数据数组($ status)中。该文档又被添加到mongo集合中。
try {
$cursor = $collection->update(array('sdomain'=>$status['sdomain']) , array('$set'=>$status), array('upsert'=>true) );
return true;
} catch(MongoCursorException $e) {
return false;
}
如何更改此项以确保将此字段视为mongo日期而不是字符串?我想我会尝试这个:http://php.net/manual/en/class.mongodate.php来替换当前创建全局变量的逻辑。
答案 0 :(得分:0)
问题在于您的数据;如果您未存储日期,则需要存储字符串。因此,当它们被排序时,它将它们排序为字符串 - 按字母顺序。
我建议您更改数据的存储方式,以便存储实际日期,如下所示:
sudo cp pk-cfappkey.pem /var/app/current/config/