[英]Trouble querying mongo dates with PHP library
我正在尝试获取与特定日期范围匹配的所有文档。 我已经在Mongo CLI中成功创建了查询,但是在将其转换为PHP Mongo库时遇到了麻烦(我刚刚升级到PHP 7,因此使用新的驱动程序/库需要一些时间来适应)。
为什么我要在CLI中返回结果,但是在我的代码中什么都没有?
$search = [];
if (isset($_GET['days'])) {
$days = explode(',', $_GET['days']);
foreach ($days as $day) {
$date = $dates[$day];
$start = new DateTime($date, new DateTimeZone('America/New_York'));
$start = new MongoDB\BSON\UTCDateTime($start);
$end = new DateTime($date, new DateTimeZone('America/New_York'));
$end->add(DateInterval::createFromDateString('1 day'));
$end = new MongoDB\BSON\UTCDateTime($end);
$search[] = [
'date.start' => [
'$gte' => $start,
'$lte' => $end
]
];
}
}
$rEvents = $mongo->events->find($search);
$dates
将单词day转换为它对应的日期。 当我检查创建的DateTime对象时,它们是正确的,但是仍然没有结果返回。 我哪里出问题了?
我工作了一段时间,直到发现了如何做(它与php 7新的mongo驱动程序兼容)。
my db="TEST"
my collection="colUser"
因此,让我们开始吧。
1)首先,我们必须实例化驱动程序php,如下所示:
$database=new MongoDB\Driver\Manager;
// Instantiate the php 7 mongo library
//2)Prepare the date (mongo uses miliseconds from 1970 not seconds
//like php)
$date1="2015-01-02";
$date1=new DateTime($date1);
$date1=new MongoDB\BSON\UTCDatetime($date1->getTimeStamp() *
1000);//Transforming into miliseconds
$date2="2016-06-01";
$date2=new DateTime($date2);
$date2=new MongoDB\BSON\UTCDatetime($date2->getTimeStamp() * 1000);//
//Transforming second date into ms
//Prepare the array to select time from $date1 to $date2 from mongo db
$array=array("date"=>array(
"\$gte"=>$date1,
"\$lt"=>$date2 ));
$query=new MongoDB\Driver\Query($array);// Preparing the query
$rows=$database->executeQuery("TEST.colUser",$query);// Getting the data into
//object $rows
// NOW WHE HAVE TO PRINT THE DATE`s THAT WE FOUND IN THE INTERVAL FROM THE
//COLLECTIONS
foreach($rows as $k=>$v){// each object $v represents objects from one row
foreach($v as $key=>$value){// each object from one row
if($key=="date"){// "date" is the index time from collection
foreach($value as $t=>$time){// $value is an object and
//it needs an foreach "[milliseconds]->time"
$time=$time / 1000; //transform from ms into
//seconds
}
echo date("Y-m-d",(int)$time);//finally we are
//echoing the time in YEAR-MONTH-DAY
echo "<br>";
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.