Possible to compare date strings in mongodb?

被刻印的时光 ゝ 提交于 2019-12-11 01:39:49

问题


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 that were created on a certain day. I was hoping I could use toDateString() and compare the values but when I do a search like the one below:

db.myCollection.find({ 'created.toDateString()': new Date('05/27/2013').toDateString() }).pretty()

But this does not work. Is there any way to do what I am attempting above?


回答1:


If you want to select records then use a date range:

db.collection.find({
    created: { "$gte": new Date("2013-05-27"), "$lt": new Date("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": new Date("2013-05-01"), 
           "$lt": new Date("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
    }}
])


来源:https://stackoverflow.com/questions/22546790/possible-to-compare-date-strings-in-mongodb

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!