php - MongoDB 中的 mysql BETWEEN 等价物

标签 php mysql mongodb

在 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/

相关文章:

php - 准备语句无法插入四个变量中的两个

c# - 通过C#使用MongoDB聚合框架时的性能问题

php - WordPress 在 get_posts 中使用通配符

php - 查询特定生日月份的数据库

php - 无法在我的实时环境中在 PHP 中显示来自 MySQL 的图像 blob,适用于开发

javascript - Mongoose 更新和插入数据的复杂查询

mongodb - 多维数据集如何连接从 MongoDB 数组创建的两个表?

php - E : Couldn't find any package by glob 'php-7.4'

php - 如何使用PHP将日期格式转换为日期时间格式

PHP排序多维数组,只能对一列进行排序