Php MongoDB中等价的mysql
在PHP和MongoDB中,我试图读取特定日历和特定时段的所有事件实例。每个事件都有开始和结束日期。它们是mongodb中的MongoDate类型 我使用以下条件从mongo获取事件Php MongoDB中等价的mysql,php,mysql,mongodb,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
$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日至7月12日的事件
$condition = array(
'start_time' => array('$gte' => '5-july-2014'),
'end_time' => array('$lte' => '12-july-2014')
);
当我运行上述事件时,不会返回
欢迎提出任何建议
在mysql中,BETWEEN可以帮助我获得所需的结果。没有“BETWEEN”的直接等价物,但有如下数据:
{
“开始时间”:ISODate(“2014-07-01T00:00:00Z”),
“结束时间”:ISODate(“2014-07-10T00:00:00Z”)
}
{
“开始时间”:ISODate(“2014-07-05T00:00:00Z”),
“结束时间”:ISODate(“2014-07-12T00:00:00Z”)
}
{
“开始时间”:ISODate(“2014-07-07T00:00:00Z”),
“结束时间”:ISODate(“2014-07-14T00:00:00Z”)
}
{
“开始时间”:ISODate(“2014-07-13T00:00:00Z”),
“结束时间”:ISODate(“2014-07-14T00:00:00Z”)
}
这项工作:
db.collection.find(
{
“$or”:[
{“开始时间”:{
“$gte”:新日期(“2014-07-05”),
“$lte”:新日期(“2014-07-12”)
}
},
{“结束时间”:{
“$gte”:新日期(“2014-07-05”),
“$lte”:新日期(“2014-07-12”)
}
}
]
}
)
并生产:
{
“开始时间”:ISODate(“2014-07-01T00:00:00Z”),
“结束时间”:ISODate(“2014-07-10T00:00:00Z”)
}
{
“开始时间”:ISODate(“2014-07-05T00:00:00Z”),
“结束时间”:ISODate(“2014-07-12T00:00:00Z”)
}
{
“开始时间”:ISODate(“2014-07-07T00:00:00Z”),
“结束时间”:ISODate(“2014-07-14T00:00:00Z”)
}
这只是那些日期在“介于”开始和结束之间的项目。没有“介于”之间的直接等价物,但数据如下:
{
“开始时间”:ISODate(“2014-07-01T00:00:00Z”),
“结束时间”:ISODate(“2014-07-10T00:00:00Z”)
}
{
“开始时间”:ISODate(“2014-07-05T00:00:00Z”),
“结束时间”:ISODate(“2014-07-12T00:00:00Z”)
}
{
“开始时间”:ISODate(“2014-07-07T00:00:00Z”),
“结束时间”:ISODate(“2014-07-14T00:00:00Z”)
}
{
“开始时间”:ISODate(“2014-07-13T00:00:00Z”),
“结束时间”:ISODate(“2014-07-14T00:00:00Z”)
}
这项工作:
db.collection.find(
{
“$or”:[
{“开始时间”:{
“$gte”:新日期(“2014-07-05”),
“$lte”:新日期(“2014-07-12”)
}
},
{“结束时间”:{
“$gte”:新日期(“2014-07-05”),
“$lte”:新日期(“2014-07-12”)
}
}
]
}
)
并生产:
{
“开始时间”:ISODate(“2014-07-01T00:00:00Z”),
“结束时间”:ISODate(“2014-07-10T00:00:00Z”)
}
{
“开始时间”:ISODate(“2014-07-05T00:00:00Z”),
“结束时间”:ISODate(“2014-07-12T00:00:00Z”)
}
{
“开始时间”:ISODate(“2014-07-07T00:00:00Z”),
“结束时间”:ISODate(“2014-07-14T00:00:00Z”)
}
这只是那些日期在“介于”开始和结束之间的项目。您的查询选择的任何事件都完全包含在给定的日期范围内,但当我正确理解您的意思时,您希望事件部分或完全与日期范围重叠 当A的开始在B的结束之前,而A的结束在B的开始之后时,一个日期范围与另一个日期范围重叠。因此请尝试
'event_start' => array('$lte' => new MongoDate($search_end)),
'event_end' => array('$gte' => new MongoDate($search_start))
我应该提到的另一个陷阱是,MongoDate并不代表一天,而是一个确切的时间点。如果你省略了时间,你在那天就到了午夜。因此,
“$lte”=>“2014年7月12日”
为您提供了2014-04-12 0:00:00.000
,在7月12日不会选择任何内容。当您想要包括那天时,可以手动设置一个时间,如2014年7月12日23:59:59
,或者只使用第二天。您的查询会选择任何完全包含在给定日期范围内的事件,但当我正确理解您的意思时,您希望事件部分或完全与日期范围重叠
当A的开始在B的结束之前,而A的结束在B的开始之后时,一个日期范围与另一个日期范围重叠。因此请尝试
'event_start' => array('$lte' => new MongoDate($search_end)),
'event_end' => array('$gte' => new MongoDate($search_start))
我应该提到的另一个陷阱是,MongoDate并不代表一天,而是一个确切的时间点。如果你省略了时间,你在那天就到了午夜。因此,
“$lte”=>“2014年7月12日”
为您提供了2014-04-12 0:00:00.000
,在7月12日不会选择任何内容。如果要包括当天,请手动设置时间,如2014年7月12日23:59:59
,或者只使用第二天。哪个事件不会返回?还显示“正在工作”的mysql查询。我提到的事件始于2014年7月1日。我在mysql中使用了3到4或条件,开始-结束日期介于两者之间。我应该删除mysql等价物,只寻找mongo特定的解决方案。“我使用3到4或条件”-那么,为什么你认为这个简单的查询会像复杂得多的查询一样?我最近遇到了一个类似的问题:哪个事件不会返回?还显示“正在工作”的mysql查询。我提到的事件始于2014年7月1日。我在mysql中使用了3到4个或开始到结束日期介于之间的条件。我应该删除与mysql等效的条件,只寻找mongo特定的解决方案。“我使用3到4个或条件”-那么,为什么你认为这个简单的查询会像复杂得多的查询一样?我最近遇到了一个类似的问题:如果我的事件结束日期是7月20日,那就没用了-2014@codepiper应该这样。2014年7月20日大于或等于2014年7月5日。“还是我误解了你的问题?”再次检查这个逻辑,结果很好。谢谢,如果我