2017-08-02 15 views
1

我寫了一些代碼,使用laravel雄辯的原始方法在日期範圍內獲取數據。但我不知道如何用laravel雄辯的原始方法寫出mongodb groupbysum。請幫我拿sum(prepayment_amount)sum(total_prepayment_amount)組由checkin_from的日期。期待的結果如下。由於如何在laravel雄辯的原始方法中編寫mongo組並使用匯總功能?

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 

回答

0

將您的金額值轉換爲字符串中的數字,並在彙總下使用。

您可以添加$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 
     ], 
], 
+0

感謝您的回覆。我會將prepaayment_amount和total_prepayment_amount更新爲數字並嘗試您的答案。然後我會在這裏更新狀態。 –

+0

非常感謝。我已經改變了雙倍,然後它正常工作。 –