MongoDb DATE(FROM_UNIXTIME( <<VALUE>>)) 和 TIME(FROM_UNIXTIME( <<VALUE>>)) 等价

MongoDb equivalence of DATE(FROM_UNIXTIME( <<VALUE>>)) and TIME(FROM_UNIXTIME( <<VALUE>>))

我有一个查询,其中时间戳存储为 unix 时间(以毫秒为单位)和 UTC 查询参数

我的 SQL 查询就像

select *
from my_table
where parameter1 = 'Goofy'
and DATE(FROM_UNIXTIME(time)) >= '2020-05-13 00:00:00.000 0000' --startdate
and DATE(FROM_UNIXTIME(time)) <= '2020-05-15 00:00:00.000 0000' --enddate
and TIME(FROM_UNIXTIME(time)) >= '01-01-1970 12:22:00.000 0000' --starttime
and TIME(FROM_UNIXTIME(time)) <= '01-01-1970 19:33:00.000 0000' --endtime

在 Mongo (php API) 中,我的查询看起来像

$query = [
    '$and' => [
         ['parameter1' => 'Goofy']
         ,['time' => [$gte =>  <conversion to unixtime for date '2020-05-13 00:00:00.000 0000' >]]
         ,['time' => [$lte  => <conversion to unixtime for date '2020-05-15 00:00:00.000 0000' >]]
         ,['time' => [$gte  => <conversion to unixtime for time '01-01-1970 12:22:00.000 0000' >]]
         ,['time' => [$lte  => <conversion to unixtime for time '01-01-1970 19:33:00.000 0000' >]]
]
];

$cursor = (new MongoDB\Client())->selectCollection('myDb', 'myTable')->find($query,[]);

将日期和时间值分开看起来有点奇怪,通常您只使用包含日期和时间部分的日期时间值。

无论如何,将 Unix 时间转换为 Date 值非常简单。请注意,Unix 时间是自 1970-01-01 00:00:00Z 以来的秒数,而 JavaScript/MongoDB 自 1970-01-01 00:00:00Z

以来使用 Milli

你的问题不是很清楚,可能是这个:

'time' => [$gte => new Date("2020-05-15 12:22:00")]

否则,将 Date/Time 值转换为整数应该在 php 上本地完成。