MongoDB PHP驱动程序:日期搜索不起作用

时间:2018-01-14 18:26:55

标签: php mongodb

我正从旧的MongoDB驱动程序迁移到PHPLIB。不幸的是,我遇到了试图转换日期搜索的问题。我正在尝试检索从某个日期(昨天)添加到数据库的文档,但是,当我执行搜索时,无论“added_on”中的值如何,我都会返回所有记录的计数。不知道我做错了什么。

    $collection = $mongo->getCollection("records");
$yesterday = new DateTime(date('Y-m-d').' 00:00:00');
$dateFrom = new MongoDB\BSON\UTCDateTime($yesterday->format('U'));
    $response = $collection->count(['added_on' => ['$gte' => $dateFrom], 'instance' => $element, 'invisible' => false]);

UTCDateTime的var_dump显示有效值:

  

对象(MongoDB \ BSON \ UTCDateTime)#477(1){[“毫秒”] =>
  string(10)“1515954053”}

预期返回的文件示例:

  

{“_ id”:ObjectId(“5a5badcffe23a278e2bb739a”),“instance”:   ObjectId(“591555806803fa06650b474c”),“added_on”:   ISODate(“2018-01-14T23:25:55Z”),“看不见”:false,“已审核”:   是的}

任何帮助都将不胜感激。

UPDATE:删除发送到UTCDateTime对象的变量,如下所示:

$dateFrom = new MongoDB\BSON\UTCDateTime();

有效(从上面可以看出,我以后添加了一条记录)。 问题是我发送变量以指定我需要的时间戳。

1 个答案:

答案 0 :(得分:4)

能够找到问题 - 当MongoDB \ BSON \ UTCDateTime收到strtotime生成的值时,会导致此行为。 该值似乎有效(没有生成错误),但因为它代表而不是毫秒,它的行为不符合预期。

我已将以下功能添加到我使用的自定义MongoDB类:

public function date($timestamp) {
    $timestamp = strtotime($timestamp) * 1000;
    $object = new MongoDB\BSON\UTCDateTime($timestamp);
    return $object;
}

然后我打电话给:

$response = $collection->count(['added_on' => ['$lt' => $mongo->date($yesterday->format('Y-m-d H:i:s'))], 'instance' => $element, 'invisible' => false]);

$ mongo是自定义类的对象。