在 PHP 和 MongoDB 中,我试图读取特定日历和特定时期的所有事件实例。每个事件都有开始和结束日期。它们是mongodb中的MongoDate类型。
我使用以下条件从 mongo 获取事件。
$condition = array(
'start_time' => array('$gte' => new MongoDate($start_day)),
'end_time' => array('$lte' => new MongoDate($end_day))
);
这是我的问题,我错过了开始日期在我的日期范围内的事件。
例如
事件开始于 2014 年 7 月 1 日
事件于 2014 年 7 月 10 日
我的 mongo 查询 - 给我从 7 月 5 日到 12 日的事件
$condition = array(
'start_time' => array('$gte' => '5-july-2014'),
'end_time' => array('$lte' => '12-july-2014')
);
当我运行上述事件时,不会返回。
欢迎提出任何建议?
在 mysql 中,BETWEEN 帮助我获得所需的结果。
最佳答案
您的查询选择了给定日期范围内完全包含的任何事件,但是当我正确理解您时,您想要的是部分或完全重叠日期范围的事件.
当 A 的开始在 B 的结束之前并且 A 的结束在 B 的开始之后时,一个日期范围与另一个日期范围重叠。所以尝试
'event_start' => array('$lte' => new MongoDate($search_end)),
'event_end' => array('$gte' => new MongoDate($search_start))
我应该提到的另一个陷阱是 MongoDate 不代表一天,而是一个确切的时间点。当您省略时间时,您会在该日期得到午夜。所以 '$lte' => '12-july-2014'
给你 2014-04-12 0:00:00.000
不会选择任何on 7 月 12 日。当您想要包括那一天时,可以手动设置一个时间,例如 12-july-2014 23:59:59
或者只使用第二天。
关于php - MongoDB 中的 mysql BETWEEN 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24604651/