php mongo - 游标没有正确排序日期

时间:2016-10-10 12:29:53

标签: php mongodb

我有以下代码来查询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来替换当前创建全局变量的逻辑。

1 个答案:

答案 0 :(得分:0)

问题在于您的数据;如果您未存储日期,则需要存储字符串。因此,当它们被排序时,它将它们排序为字符串 - 按字母顺序

我建议您更改数据的存储方式,以便存储实际日期,如下所示:

sudo cp pk-cfappkey.pem /var/app/current/config/