Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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 带日期的Laravel Mongodb原始mongo查询_Php_Mongodb_Laravel_Jenssegers Mongodb - Fatal编程技术网

Php 带日期的Laravel Mongodb原始mongo查询

Php 带日期的Laravel Mongodb原始mongo查询,php,mongodb,laravel,jenssegers-mongodb,Php,Mongodb,Laravel,Jenssegers Mongodb,我正在开发Laravel5.1并使用JessengerMongoDB包。 我使用原始查询获取数据,但我不知道如何使用日期,因为当前它返回空结果 $resultSet = DB::connection('mongodb')->collection('wc_mycollection')->raw(function ($collection){ return $collection->aggregate([ [

我正在开发Laravel5.1并使用JessengerMongoDB包。 我使用原始查询获取数据,但我不知道如何使用日期,因为当前它返回空结果

 $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',

                    ]
                ]
            ]);
        });

我该怎么办?

在laravel中有一个非常好的日期处理包,名为,可以用于查询。如果要从今天开始获取记录,请使用Carbon的属性,或者要在午夜获取上一个日期,请使用

将所有这些结合在一起,您可以将管道构建为:

$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
                    )
                )
            )   
        ));
    });
尝试此选项:

'$match'=>[
      'created_at'=>[
             '$gte' => new Date("2016-10-02T00:00:00.000Z"),
             '$lt' => new Date("2016-11-02T00:00:00.000Z")
      ]
]
看,如果这样行得通的话。

这对我来说很有效:

$start = new \MongoDB\BSON\UTCDateTime(new \DateTime("-8 days"));

我的收藏看起来像这样:{“\u id”:ObjectId(“55e6eff42f706e30047b23c8”),“war\u id”:3,“topic\u id”:5,“point\u id”:7,“point”:1,“comment\u id”:“55e6efdd2f706e0d047b23ca”,“user\u id”:11,“upvote\u id”:3,“updated\u at”:ISODate(“2015-09-02T12:47:48.191Z”),“created\u at”:ISODate(“2015-09-02T12:47:48.191Z”)}调试管道的一种方法是只使用第一个管道操作符运行聚合,这会给您带来意外的结果。如果得到预期结果,则添加下一个。在上面的答案中,您应该首先尝试仅聚合
$match
;如果有效,请添加
$group
。这可以帮助您缩小导致问题的操作员范围。此外,为了帮助您进行调试,只需检查这些日期变量是否为您提供了正确的日期,以及是否与您的实际MongoDB日期进行了检查。匹配运算符导致了问题。如果您通过更改范围查询中的日期变量来调试
$match
运算符,请查看某些日期是否匹配?分配日期参数后,打印查询并查看日期参数设置是否正确,如果正确,则尝试将该时间戳转换为基于mongo的时间格式。看这里: