【发布时间】:2016-06-16 11:02:15
【问题描述】:
我在 mongodb 集合中有超过 5 万条记录。为了避免 laravel 中的 foreach 循环,我在查询中使用了聚合。
$start = new MongoDate(strtotime("2015-10-01 00:00:00"));
$result = Pms::raw(function ($collection) use($start){
return $collection->aggregate(array(
array( '$project' => array( 'EventTS' => 1, 'MainsPower' => 1, '_id' => 0) ),
array(
'$unwind' => array(
'path' => '$MainsPower',
'includeArrayIndex' => "arrayIndex",
'preserveNullAndEmptyArrays' => true
)
),
array(
'$match' => array(
'EventTS' => array(
'$gte' => $start
)
)
),
array(
'$project' => array(
'MainsPower' => 1,
'timestamp' => array(
'$add' => array(
'$EventTS',
array( '$multiply' => array( 60000, '$arrayIndex' ) )
)
)
)
)
));
})->toArray();
我需要将日期与集合进行比较,但如果我使用下面的代码,那么我的结果集返回空。
array(
'$match' => array(
'EventTS' => array(
'$gte' => $start
)
)
)
使用 Laravel 5.2 在 PHP 中的 mongodb 集合中比较日期的正确方法是什么。
附上示例文件
{
"_id" : ObjectId("576165f58d8b8f39458b456a"),
"EventTS" : ISODate("2000-05-11T05:30:00.000+0000"),
"PanelID" : "A01000",
"MainsPower" : [
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
NumberInt(147),
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null
],
}
{
"_id" : ObjectId("576165f58d8b8f39458b456b"),
"EventTS" : ISODate("2016-06-08T18:30:00.000+0000"),
"PanelID" : "A01604",
"MainsPower" : [
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null
]
}
【问题讨论】:
标签: php mongodb laravel-5.2