首页 > 解决方案 > MongoDB 在 $gte 中使用 UTCDateTime 不起作用

问题描述

我正在编写一个查询来搜索在特定日期创建的用户,例如

$date = '2018-05-02 15:46:41.000Z';
User::raw(function ($col) use($date) { 
   return $col->aggregate([
        ['$match' =>
            'created_at' => ['$gte' => new \MongoDB\BSON\UTCDateTime(strtotime($date))]
        ]
    ]);
});

给定一个样本数据,例如

{
  "_id" : ObjectId("5ae9dd61ef7a5754f159c656"),
  "name" : "Effie Larkin",
  "created_at" : ISODate("2018-05-02 15:46:41.000Z"),
}...

预期结果应该是

{
  "users" : [
        "_id" : {"$oid": "5ae9dd61ef7a5754f159c656"},
        "name" "Effie Larkin",
        "created_at" : "2018-05-02 15:46:41"
   ]
}...

但我得到一个空的 json 数组[]。我认为问题出在 UTCDateTime 函数中,但我不知道如何将 dateTime 传递给它。我想通过一个时间间隔,比如 1 周前或昨天等...如果有人可以帮助我,将不胜感激,谢谢

更新,下面的例子修复了它

$date = '2018-05-02';
User::raw(function ($col) use($date) { 
   return $col->aggregate([
        ['$match' =>
            'created_at' => ['$gte' => new \MongoDB\BSON\UTCDateTime(strtotime($date)*1000)]
        ]
    ]);
});

标签: phpmongodblaravelmongodb-query

解决方案


推荐阅读