【问题标题】:MongoDB ISODate query with PHP使用 PHP 进行 MongoDB ISODate 查询
【发布时间】:2016-07-25 08:51:28
【问题描述】:

我正在尝试根据日期从 mongo 集合中检索数据,我想获取日期大于或等于当前日期的数据(即数据字段下的日期)。但是我似乎无法理解为什么我的查询什么都不返回(空的 mongo 对象)。以下是我的代码:

数组结构/内容:

{ 
"_id" : ObjectId("990093409187049704809d"), 
"type" : "number 1 champion", 
"entryDate" : ISODate("2016-05-12T10:55:55.000+0000"), 
"requester" : {
    "cn" : "Torgue", 
    "username" : "tg"
}, 
"data" : {
    "office" : "Badass Crater of Badassitude",  
    "name" : {
        "firstname" : "Salvador", 
        "middlename" : "A", 
        "surname" : "Gunzerker"
    }, 
    "date" : ISODate("2016-05-23T23:00:00.000+0000"), 
}, 
"index" : "1"
}

PHP 查询:

$today =  date(DATE_ISO8601, (new MongoDate())->sec);
$str = $col1->find(array('type' => 'number 1 champion', 'data.date'=>array ('gte'=>$today))); 
print_r($str);

请任何人指出正确的方向或向我解释如何才能获得正确的输出。

对于遇到相同问题的任何人,以下是解决方案:

$query = array('type' => 'number 1 champion', 'data.date'=>array ('$gte'=>new mongoDate()));
$str = $col1->find($query);

然后循环查看结果:

echo '<pre>';
foreach($str as $doc){
  print_r($doc);
}

【问题讨论】:

    标签: php mongodb isodate mongodate


    【解决方案1】:

    您必须使用 MongoDate 对象来查询。

    对于当前日期,您可以使用 new MongoDate() 使 MongoDate 使用当前日期进行初始化

    如果你想传递一些自定义日期,你可以使用 strtotime 将字符串转换为日期类型

    $stringtime = "2016-04-09 00:00:00"
    
    $inputdate = strtotime($stringtime)
    

    然后最终将其传递给 MongoDate 构造函数以获取相关对象。

    new MongoDate($inputdate)
    

    参考PHP Docs

    【讨论】:

    • @JustIce 看起来你现在有了解决方案,而且看起来问题是一样的。 new MongoDate() 将为您提供具有当前日期的对象 new MongoDate(strtotime($inputDate)) 和使用一些 $inputDate 的选项,它可以是带有 Date Format 的字符串。我已经更新了我的答案以获得更清晰的视图
    【解决方案2】:

    对于那些像我一样通过搜索到达这里的人,同时可以在此处找到当前的解决方案(2021):https://www.php.net/manual/en/class.mongodb-bson-utcdatetime.php

    请注意第一条评论的毫秒数。也许它会在故障排除时节省您的时间;-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 2018-01-18
      相关资源
      最近更新 更多