【问题标题】:MongoDB PHP Driver: Date search not workingMongoDB PHP驱动程序:日期搜索不起作用
【发布时间】:2018-06-23 11:32:20
【问题描述】:

我正在从旧的 MongoDB 驱动程序迁移到 PHPLIB。不幸的是,我在尝试转换日期搜索时遇到了问题。我正在尝试检索从某个日期(昨天)添加到数据库中的文档,但是,当我执行搜索时,无论“add_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) { [“毫秒”]=>
字符串(10)“1515954053”}

预期返回的文档示例:

{ "_id" : ObjectId("5a5badcffe23a278e2bb739a"), "instance" : ObjectId(“591555806803fa06650b474c”),“add_on”: ISODate("2018-01-14T23:25:55Z"), "invisible" : false, "reviewed" : 真的}

任何帮助将不胜感激。

更新:像这样删除发送到 UTCDateTime 对象的变量:

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

作品(如上所示,我将来添加了一条记录)。 问题是当我发送变量来指定我需要的时间戳时。

【问题讨论】:

  • 将其更改为 $lt 总是会返回 0。$gte 会返回所有内容,无论 ' added_on' 中的值如何。
  • 您可以在帖子中添加您希望查询返回的文档吗?
  • 已添加。谢谢! .

标签: php mongodb


【解决方案1】:

能够找到问题 - 当 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 是自定义类的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-19
    • 2016-07-25
    • 2019-02-27
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多