user1584253
user1584253

Reputation: 1005

MongoDB - filter in find function

I am writing a query in mongo db. I want to know that how do I use substring function in find function, like I have a date string. I want to filter the date by year and then group by month. This is what I have tried:

db.booking.find({$substr:["$bookingdatetime",5,2]:"14"}).aggregate([     {$group: {         _id: {$substr: ['$bookingdatetime', 5, 2]},          numberofbookings: {$sum: 1}     }} ])

Where am I going wrong ?

Upvotes: 0

Views: 1362

Answers (1)

BatScream
BatScream

Reputation: 19700

$substr can be used only as a string aggregation operation. You cannot use it as a operator in a find query. You can form the aggregation pipeline as below:

db.booking.aggregate([
{$project:{"year":{$substr:["$bookingdatetime",5,2]},
           "numberofbookings":1,
           "bookingdatetime":1}},
{$match:{"year":14}},
{$group:{"_id":{$substr: ['$bookingdatetime', 5, 2]},
         numberofbookings: {$sum: 1}}}
])

or,

use a regex to match the date pattern with specific year.

Upvotes: 1

Related Questions