php - MongoDB PHP 驱动程序 : Date search not working

标签 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 显示有效值:

object(MongoDB\BSON\UTCDateTime)#477 (1) { ["milliseconds"]=>
string(10) "1515954053" }

预期返回的文档示例:

{ "_id" : ObjectId("5a5badcffe23a278e2bb739a"), "instance" : ObjectId("591555806803fa06650b474c"), "added_on" : ISODate("2018-01-14T23:25:55Z"), "invisible" : false, "reviewed" : true }

如有任何帮助,我们将不胜感激。

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

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

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

最佳答案

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

关于php - MongoDB PHP 驱动程序 : Date search not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48252771/

相关文章:

PHP - 更漂亮的一行 if

php - 数组的数组。返回最左边和最右边的索引

php - 悬停时仅在图像上显示文字 - wordpress 主题

mongodb - 连接到在Docker中运行的mongodb

mongodb - 如何使用 mongodb 为每个特定字段选择多条记录?

MongoDB 空字符串值与 null 值

javascript - 使用 mongodb 保存具有 Node.js 异步特性的多个数据

php - 从复杂的嵌套 JSON 对象获取数据(使用 PHP)

php - 使用 PHP 将 JSON 结果作为 1 到多个关系 Mysql 查询返回

mapreduce - MongoDB MapReduce 更新到位如何