【问题标题】:Laravel with mongodb aggregate , select where dateLaravel 与 mongodb 聚合,选择日期
【发布时间】:2020-04-16 01:10:54
【问题描述】:

我有一个 mongo 数据库,里面有这样的数据

{ "_id" : ObjectId("5e0202d3fae94619c020c390"), "sys" : "2019-12-19", "time" : ISODate("2019-12-19T11:28:30.454Z"), "time_rcvd" :ISODate(“2019-12-19T11:28:30.454Z”),“msg”:“”,“syslog_fac”:23,“syslog_sever”:6,“syslog_tag”:“11:”,“procid”:“ 11”、“pid”:“-”、“level”:“INFO”、“logtype”:“交通日志”、“date”:“2019-12-19”、“Module”:“01SECLOG”、“Desc ":"IPVer","Severity_Level":"6","Protocol":"tcp","SourceIP":"10.10.2.101","Country":"172.217.169.194","DestinationIP":"172.217.169.194" ”,“SourcePort”:“39554”,“DestinationPort”:“443”,“SourceNatIP”:“192.168.101.2”,“SourceNatPort”:“4128”,“BeginTime”:“1576754847”,“EndTime”:“1576754894” ","SendPkts":"59","SendBytes":"11041","RcvPkts":"81","RcvBytes":"8095","SourceVpnID":"0","DestinationVpnID":"0", “SourceZone”:“guest”,“DestinationZone”:“untrust”,“PolicyName”:“guest_to_untrust”,“CloseReason”:“tcp-rst”,“ApplicationName”:“Google_Service。”,“VSys”:“”, “用户”:“”,“公关” ofile”:“”,“类型”:“”,“类别”:“”,“子类别”:“”,“页面”:“”,“主机”:“”,“推荐人”:“”,“项目” " : "", "动作" : "" }

我正在应用这个查询来从中获取数据,使用 laravel 聚合

$data = Logss::raw(function($collection)use ($topLength,$start)
     {
   return $collection->aggregate([
        [

        '$group'    => [
            '_id'   => '$ApplicationName',

            'count' => [
                '$sum'  => 1
            ]
        ]
    ],
    ['$sort' => ['count' => -1]],

    ['$limit'=> $topLength]
]);
}); 

我可以毫无问题地获取数据,但我决定根据用户选择的日期对这些数据进行过滤 喜欢

{ last_hour , 今天 , 昨天 , this_week , last_week , this_month , last_month , this_year };

例如当用户选择今天时,我将使用碳来获取今天的日期

$today = new Carbon('today');

它是返回

2019-12-25 00:00:00

但我不知道该怎么做,只检索今天的记录,
我使用了这段代码,但没有返回任何内容

 $data = Logss::raw(function($collection)use ($topLength)
{
return $collection->aggregate([
 [

        '$group'    => [
            '_id'   => '$ApplicationName',

            'count' => [
                '$sum'  => 1
            ]
        ]
    ],
    ['$sort' => ['count' => -1]],
 [ '$match' => [ 'time' =>['$gt'=>' ISODate("2017-10-01")' ]]],
    ['$limit'=> $topLength]
]);
}); 

【问题讨论】:

    标签: laravel mongodb aggregate


    【解决方案1】:

    试试

        $dt = Carbon::create(2012, 1, 31, 0);
        echo $dt->addHours(24);                  // 2012-02-04 00:00:00
        echo $dt->addHour();                     // 2012-02-04 01:00:00
        echo $dt->subHour();                     // 2012-02-04 00:00:00
        echo $dt->subHours(24);                  // 2012-02-03 00:00:00
    

    Document

    【讨论】:

    • 感谢您的回复,但我如何在查询中使用它
    • 试试 db.foo.find({ "dt" : { "$gte" : { "$date" : $dt->subHour();}} })
    • 感谢您的回复,我用我使用的新代码更新了我的帖子,但此代码没有返回任何内容
    【解决方案2】:

    这是我尝试过的。希望能帮到你:)

     db.getCollection('collectionName').find({
        created: {
            $gte: '2019-10-28 00:00:00',
            $lt:  '2019-10-29 10:22:10'
        }
    })
    

    【讨论】:

    • 谢谢回复,这段代码我知道,但不知道如何在laravel聚合中应用
    • 你尝试过 noSqlDb 吗?
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 2020-01-21
    • 2018-04-25
    • 2014-10-16
    • 2013-11-25
    相关资源
    最近更新 更多