Php 如何用laravel雄辩的原始方法编写mongo group by和sum聚合函数?
我编写了一些代码,使用laravel雄辩的原始方法获取日期范围内的数据。但我不知道如何用laravel雄辩的原始方法编写mongodbPhp 如何用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
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,然后它可以正常工作。