Php 如何用laravel雄辩的原始方法编写mongo group by和sum聚合函数?

Php 如何用laravel雄辩的原始方法编写mongo group by和sum聚合函数?,php,mongodb,laravel,laravel-5,laravel-5.4,Php,Mongodb,Laravel,Laravel 5,Laravel 5.4,我编写了一些代码,使用laravel雄辩的原始方法获取日期范围内的数据。但我不知道如何用laravel雄辩的原始方法编写mongodbgroupby和sum。请帮助我从日期开始,按签入分组,获取金额(预付款金额)和金额(预付款金额总额)。预期结果如下所示。谢谢 DashbardController.php $cabinName = $request->cabin; $daterange = explode("-", $re

我编写了一些代码,使用laravel雄辩的原始方法获取日期范围内的数据。但我不知道如何用laravel雄辩的原始方法编写mongodb
groupby
sum
。请帮助我从日期开始,按签入分组,获取金额(预付款金额)和金额(预付款金额总额)。预期结果如下所示。谢谢

DashbardController.php

    $cabinName              = $request->cabin;
    $daterange              = explode("-", $request->daterange);
    $dateBegin              = new \MongoDB\BSON\UTCDateTime(strtotime($daterange[0])*1000);
    $dateEnd                = new \MongoDB\BSON\UTCDateTime(strtotime($daterange[1])*1000);
    $bookings               = Booking::raw(function ($collection) use ($cabinName, $dateBegin, $dateEnd) {
       return $collection->aggregate([
          [
            '$match' => [
                         'is_delete' => 0,
                         'cabinname' => $cabinName,
                         'checkin_from' => ['$gte' => $dateBegin, '$lte' => $dateEnd]
                         ],
          ],
       ]);
   });
   dd($bookings);
预订集合

    { "_id" : ObjectId("58046a49f8f888a80b00002a"), "cabinname" : "Matras-Haus", "checkin_from" : ISODate("2016-09-17T00:00:00Z"), "prepayment_amount" : "20", "total_prepayment_amount" : "25", "bookingdate" : ISODate("2016-09-17T06:06:01Z"), "reservation_cancel" : "2", "is_delete" : NumberLong(1), "payment_status" : "1" }
    { "_id" : ObjectId("58183678d2ae67a404431d5c"), "cabinname" : "Kemptner Hütte", "checkin_from" : ISODate("2016-10-31T23:00:00Z"), "prepayment_amount" : "30", "total_prepayment_amount" : "40", "bookingdate" : ISODate("2016-11-01T06:30:16Z"), "reservation_cancel" : "2", "is_delete" : NumberLong(1), "payment_status" : "0" }
    { "_id" : ObjectId("581b31f3d2ae674d5f431d5b"), "cabinname" : "Kemptner Hütte", "checkin_from" : ISODate("2016-10-31T23:00:00Z"), "prepayment_amount" : "35", "total_prepayment_amount" : "45", "bookingdate" : ISODate("2016-11-03T12:47:47Z"), "reservation_cancel" : "2", "is_delete" : NumberLong(1) }
    { "_id" : ObjectId("5821af65d2ae67c82154efc5"), "cabinname" : "Kemptner Hütte", "checkin_from" : ISODate("2016-09-05T22:00:00Z"), "prepayment_amount" : "40", "total_prepayment_amount" : "45", "bookingdate" : ISODate("2016-11-08T10:56:37Z"), "reservation_cancel" : "2", "is_delete" : NumberLong(1) }
    { "_id" : ObjectId("582558d4d2ae679c4d8b4567"), "cabinname" : "Matras-Haus", "checkin_from" : ISODate("2016-09-17T22:00:00Z"), "prepayment_amount" : "20", "total_prepayment_amount" : "23", "bookingdate" : ISODate("2016-08-17T05:36:20Z"), "is_delete" : NumberLong(1) }
    { "_id" : ObjectId("58352c3cd2ae672341ec89e1"), "cabinname" : "Kemptner Hütte", "checkin_from" : ISODate("2016-09-05T22:00:00Z"), "prepayment_amount" : "50", "total_prepayment_amount" : "55", "bookingdate" : ISODate("2016-08-05T05:42:20Z"), "reservation_cancel" : "2", "is_delete" : NumberLong(1) }
    { "_id" : ObjectId("58352c3cd2ae672341ec887e1"), "cabinname" : "Kemptner Hütte", "checkin_from" : ISODate("2017-10-05T22:00:00Z"), "prepayment_amount" : "50", "total_prepayment_amount" : "55", "bookingdate" : ISODate("2017-08-05T05:42:20Z"), "reservation_cancel" : "2", "is_delete" : NumberLong(1) }
    { "_id" : ObjectId("58352c3cd2ae672341ec887e1"), "cabinname" : "Matras-Haus", "checkin_from" : ISODate("2017-10-05T22:00:00Z"), "prepayment_amount" : "50", "total_prepayment_amount" : "55", "bookingdate" : ISODate("2017-08-05T05:42:20Z"), "reservation_cancel" : "2", "is_delete" : NumberLong(1) }
预期结果

prepayment_amount total_prepayment_amount    checkin_from  cabinname

40                       48                  2016-09-17    Matras-Haus

50                       55                  2017-10-05    Matras-Haus

65                       85                  2016-10-31    Kemptner Hütte

90                       110                 2016-09-05    Kemptner Hütte

50                       55                  2017-10-05    Kemptner Hütte

将金额值从字符串转换为数字,并使用下面的聚合

您可以添加
$group
以合计金额值,并添加
$project
以格式化响应

[
   '$match' => 
      [
           'is_delete' => 0,    
           'cabinname' => $cabinName,
           'checkin_from' => ['$gte' => $dateBegin, '$lte' => $dateEnd]
      ],
],
[
   '$group' => 
      [
          '_id' => ['checkin_from' => '$checkin_from','cabinname' => '$cabinname'], 
          'total_prepayment_amount' => ['$sum' => '$total_prepayment_amount'], 
          'prepayment_amount' => ['$sum' => '$prepayment_amount'] 
      ],
],
[
   '$project' => 
      [
          'checkin_from' => '$_id.checkin_from',
          'cabinname' => '$_id.cabinname', 
          'total_prepayment_amount' => 1,
          'prepayment_amount' => 1 
      ],
],

将金额值从字符串转换为数字,并使用下面的聚合

您可以添加
$group
以合计金额值,并添加
$project
以格式化响应

[
   '$match' => 
      [
           'is_delete' => 0,    
           'cabinname' => $cabinName,
           'checkin_from' => ['$gte' => $dateBegin, '$lte' => $dateEnd]
      ],
],
[
   '$group' => 
      [
          '_id' => ['checkin_from' => '$checkin_from','cabinname' => '$cabinname'], 
          'total_prepayment_amount' => ['$sum' => '$total_prepayment_amount'], 
          'prepayment_amount' => ['$sum' => '$prepayment_amount'] 
      ],
],
[
   '$project' => 
      [
          'checkin_from' => '$_id.checkin_from',
          'cabinname' => '$_id.cabinname', 
          'total_prepayment_amount' => 1,
          'prepayment_amount' => 1 
      ],
],

谢谢你的回复。我会将预付款金额和总预付款金额更新为数字,然后尝试您的答案。然后我会在这里更新状态。非常感谢。我已将类型更改为“加倍”,然后它可以正常工作。谢谢您的回复。我会将预付款金额和总预付款金额更新为数字,然后尝试您的答案。然后我会在这里更新状态。非常感谢。我已将类型更改为double,然后它可以正常工作。