Possible To Compare Date Strings In Mongodb?
I have a collection that contains documents with a date attribute like so: { title: 'whatever', created: ISODate('2013-05-27T03:36:50Z') } I would like to select records tha
Solution 1:
If you want to select records then use a date range:
db.collection.find({
created: { "$gte": newDate("2013-05-27"), "$lt": newDate("2013-05-28") }
})
And that selects all the contained hours, minutes etc, falling between the two dates.
So you should be trying to use the date values and not coerce into strings.
If you want this for doing aggregation or otherwise need the results in a day only format then do this using $project and the date operators:
db.collection.aggregate([
// Still match on the normal date forms, this time whole month
{ "$match": {
created: {
"$gte": newDate("2013-05-01"),
"$lt": newDate("2013-05-31")
}
}},
// Project the date
{ "$project": {
"date": {
"year" : { "$year" : "$created" },
"month" : { "$month" : "$created" },
"day": : { "$dayOfMonth": "$created" }
},
"title": 1
}},
// Group on day and title
{ "$group": {
"_id": {
"date" : "$date",
"title" : "$title"
},
"count": { "$sum": 1 }
}},
// Sort by date
{ "$sort": {
"_id.date.year": 1,
"_id.date.month": 1,
"_id.date.day": 1,
}},
// Project nicer dates and document
{ "$project": {
"_id": 0,
"date": { "$concat": [
{ "$substr": [ "$_id.date.year", 0, 4 ] },
"-",
{ "$substr": [ "$_id.date.month", 0, 2 ] },
"-",
{ "$substr": [ "$_id.date.day", 0, 2 ] }
]},
"title": "$_id.title",
"count": 1
}}
])
Post a Comment for "Possible To Compare Date Strings In Mongodb?"