Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MongoDB中等价的mysql_Php_Mysql_Mongodb - Fatal编程技术网

Php MongoDB中等价的mysql

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

在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日至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日。“还是我误解了你的问题?”再次检查这个逻辑,结果很好。谢谢,如果我