I am writing a query in mongo db. I have a booking table and I want to get number of bookings in a month i.e. group by month. I am confused that how to get month from a date.
Here is my schema:
{
"_id" : ObjectId("5485dd6af4708669af35ffe6"),
"bookingid" : 1,
"operatorid" : 1,
"clientid" : null,
"callername" : "Sayem Hussain",
"contactno" : "0205661862",
"regular" : 0,
"bookingdetail" : [
{
"driverid" : 1,
"pickupdatetime" : "2011-04-14 11:00:00",
"from" : "white chapel",
"to" : "beach",
"cost" : 500,
"journeytime" : 60
},
{
"driverid" : 2,
"pickupdatetime" : "2012-05-14 12:00:00",
"from" : "walthamstow",
"to" : "mile end",
"cost" : 1000,
"journeytime" : 50
}
],
"bookingdatetime" : "2012-10-11T07:00:00Z"
}
{
"_id" : ObjectId("5485dd6af4708669af35ffe7"),
"bookingid" : 2,
"operatorid" : 1,
"clientid" : 1,
"callername" : null,
"contactno" : "0205561281",
"regular" : 1,
"bookingdetail" : [
{
"driverid" : 3,
"pickupdatetime" : "2012-02-12 09:00:00",
"from" : "grange park",
"to" : "queen mary",
"cost" : 650,
"journeytime" : 90
},
{
"driverid" : 2,
"pickupdatetime" : "2012-02-13 06:00:00",
"from" : "drapers bar",
"to" : "naveed restaurant",
"cost" : 1350,
"journeytime" : 120
}
],
"bookingdatetime" : "2014-07-26T05:00:00Z"
}
{
"_id" : ObjectId("5485dd6af4708669af35ffe8"),
"bookingid" : 3,
"operatorid" : 2,
"clientid" : 2,
"callername" : null,
"contactno" : "02565138632",
"regular" : 1,
"bookingdetail" : [
{
"driverid" : 2,
"pickupdatetime" : "2013-11-23 06:00:00",
"from" : "hussainabad",
"to" : "lyari",
"cost" : 2450,
"journeytime" : 240
},
{
"driverid" : 1,
"pickupdatetime" : "2013-11-25 08:00:00",
"from" : "garden",
"to" : "defence",
"cost" : 1800,
"journeytime" : 30
}
],
"bookingdatetime" : "2014-03-17T11:00:00Z"
}
And this is I have tried:
db.booking.aggregate([{$group:{_id:new Date("$bookingdatetime").getMonth(), numberofbookings:{$sum:1}}}])
and it returns:
{ "_id" : NaN, "numberofbookings" : 3 }
Where am I going wrong ? Kindly assist me.
See Question&Answers more detail:
os