我正在使用laravel 5.1并使用jessenger mongodb包。 我正在使用原始查询来获取数据,但我很困惑如何使用日期,因为它当前返回null结果。
$resultSet = DB::connection('mongodb')->collection('wc_mycollection')->raw(function ($collection){
return $collection->aggregate([
[
'$match'=>[
'created_at'=>[
'$gte' => Previous day midnight,
'$lt' => Current Time
]
]
],
[
'$group' => [
'_id' => '$some_id',
]
]
]);
});
我该怎么办?
答案 0 :(得分:0)
laravel中有一个非常好的日期处理包,名为 Carbon ,您可以将其与查询一起使用。如果您想从今天开始获取记录,请使用Carbon的 startOfDay()
属性,或者使用 Carbon::yesterday()->endOfDay()
获取上一个日期午夜。
将所有这些结合在一起,您可以构建您的管道:
$previousDayMidnight = Carbon::yesterday()->endOfDay(); // or $startOfToday = Carbon::now()->startOfDay()
$currentTime = Carbon::now();
$result = DB::collection('wc_mycollection')->raw(function($collection)
{
return $collection->aggregate(array(
array(
'$match' => array(
'created_at' => array(
'$gte' => $previousDayMidnight, // or $startOfToday
'$lt' => $currentDateTime
)
)
),
array(
'$group' => array(
'_id' => '$some_id',
'count' => array(
'$sum' => 1
)
)
)
));
});
另一种方法是本地使用MongoDate对象,你可以尝试
$start = new MongoDate(strtotime(date('Y-m-d H:i:s', '-1 days')));
$end = new MongoDate(strtotime(date('Y-m-d H:i:s')));
$result = DB::collection('wc_mycollection')->raw(function($collection)
{
return $collection->aggregate(array(
array(
'$match' => array(
'created_at' => array(
'$gte' => $start,
'$lt' => $end
)
)
),
array(
'$group' => array(
'_id' => '$some_id',
'count' => array(
'$sum' => 1
)
)
)
));
});
答案 1 :(得分:0)
尝试此选项:
'$match'=>[
'created_at'=>[
'$gte' => new Date("2016-10-02T00:00:00.000Z"),
'$lt' => new Date("2016-11-02T00:00:00.000Z")
]
]
看,如果有效。
答案 2 :(得分:0)
这对我有用:
$start = new \MongoDB\BSON\UTCDateTime(new \DateTime("-8 days"));