首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB驱动程序:日期搜索不起作用

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

Stack Overflow用户
提问于 2018-01-14 18:26:55
回答 1查看 1.3K关注 0票数 2

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

代码语言:javascript
复制
    $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]);

var_dump of UTCDateTime显示了一个有效值:

对象(MongoDB\BSON\UTCDateTime)#477 (1) {“毫秒”=> 字符串(10) "1515954053“}

预期返回的文档示例:

{ "_id“:ObjectId(”5a5badcffe23a278ebb739a“),”实例“:ObjectId(”591555806803 fa06650b474c“),"added_on”:ISODate("2018-01-14T23:25:55Z"),“不可见”:假,“审查”:真}

任何帮助都将不胜感激。

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

代码语言:javascript
复制
$dateFrom = new MongoDB\BSON\UTCDateTime();

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

EN

回答 1

Stack Overflow用户

发布于 2018-01-14 20:34:15

能够找到问题--当MongoDB\BSON\UTCDateTime接收到由strtotime生成的值时,就会导致此行为。该值似乎是有效的(没有生成错误),但是由于它表示的是毫秒而不是毫秒,所以它的行为不像预期的那样。

我将以下函数添加到正在使用的自定义MongoDB类中:

代码语言:javascript
复制
public function date($timestamp) {
    $timestamp = strtotime($timestamp) * 1000;
    $object = new MongoDB\BSON\UTCDateTime($timestamp);
    return $object;
}

然后我就打电话:

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

$mongo是自定义类的对象。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48252771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档