Laravel Mongodb Raw mongo查询日期

时间:2016-02-11 06:44:24

标签: php mongodb laravel jenssegers-mongodb

我正在使用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',

                    ]
                ]
            ]);
        });

我该怎么办?

3 个答案:

答案 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"));