Database

db={orders:[{_id:"mongoIdA",/** 5f5ea6276ba53b06944de28c*/createdAt:ISODate("2020-09-15T23:07:19.370Z"),totalPrice:34,/** is calculated from the client (quantity* price)*/orderDetail:[{_id:"product-A-Id",/** 5f5ea403e91ed91a44b62c92*/quantity:4,price:5.5,},{_id:"product-B-Id",quantity:1,price:3.5,},{_id:"product-C-Id",quantity:1,price:8.5,},],},{_id:"mongoIdB",createdAt:ISODate("2020-09-15T23:08:20.370Z"),totalPrice:15.5,orderDetail:[{_id:"product-C-Id",quantity:3,price:3,},{_id:"product-D-Id",quantity:1,price:6.5,},],},{_id:"mongoIdC",createdAt:ISODate("2020-09-15T23:09:25.370Z"),totalPrice:22.5,orderDetail:[{_id:"product-D-Id",quantity:5,price:4.5}]},{_id:"mongoIdD",createdAt:ISODate("2020-09-16T00:09:25.370Z"),totalPrice:22.5,orderDetail:[{_id:"product-D-Id",quantity:5,price:4.5}]},{_id:"mongoIdE",createdAt:ISODate("2020-09-16T01:09:25.370Z"),totalPrice:22.5,orderDetail:[{_id:"product-D-Id",quantity:5,price:4.5}]},{_id:"mongoIdF",createdAt:ISODate("2020-09-16T11:09:25.370Z"),totalPrice:22.5,orderDetail:[{_id:"product-D-Id",quantity:5,price:4.5}]}]}

Query

db.orders.aggregate([{$addFields:{hour:{$let:{vars:{hour:{$hour:"$createdAt"},remainder:{$mod:[{$hour:"$createdAt"},2/** Two hour blocks, can be 2,3,4,6,8,12*/]},},in:{$subtract:["$$hour","$$remainder"]}}}}},{$group:{_id:"$hour",x:{$last:"$hour"},y:{$sum:"$totalPrice"}}}])

Result