我正在从旧的 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]);
Run Code Online (Sandbox Code Playgroud)
UTCDateTime 的 var_dump 显示有效值:
对象(MongoDB\BSON\UTCDateTime)#477 (1) { ["毫秒"]=>
字符串(10) "1515954053" }
预期返回的文档示例:
{ "_id" : ObjectId("5a5badcffe23a278e2bb739a"), "instance": ObjectId("591555806803fa06650b474c"), " added_on" : ISODate("2018-01-14T25Z", "false"), "false"): “ : 真的 }
任何帮助,将不胜感激。
更新:删除发送到 UTCDateTime 对象的变量,如下所示:
$dateFrom = new MongoDB\BSON\UTCDateTime();
Run Code Online (Sandbox Code Playgroud)
有效(如上所示,我将来添加了一条记录)。问题是当我发送变量来指定我需要的时间戳时。
能够找到问题 - 当 MongoDB\BSON\UTCDateTime 收到由 strtotime 生成的值时会导致此行为。该值似乎是有效的(没有产生错误),但因为它代表的是毫秒而不是毫秒,所以它的行为不像预期的那样。
我已将以下函数添加到我正在使用的自定义 MongoDB 类中:
public function date($timestamp) {
$timestamp = strtotime($timestamp) * 1000;
$object = new MongoDB\BSON\UTCDateTime($timestamp);
return $object;
}
Run Code Online (Sandbox Code Playgroud)
然后我就打电话:
$response = $collection->count(['added_on' => ['$lt' => $mongo->date($yesterday->format('Y-m-d H:i:s'))], 'instance' => $element, 'invisible' => false]);
Run Code Online (Sandbox Code Playgroud)
$mongo 是自定义类的对象。
| 归档时间: |
|
| 查看次数: |
1104 次 |
| 最近记录: |