MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Möglich, Datumszeichenfolgen in Mongodb zu vergleichen?

Wenn Sie Datensätze auswählen möchten, verwenden Sie einen Datumsbereich:

db.collection.find({
    created: { "$gte": new Date("2013-05-27"), "$lt": new Date("2013-05-28") }
})

Und das wählt alle enthaltenen Stunden, Minuten usw. aus, die zwischen die beiden Daten fallen.

Also sollten Sie Versuchen Sie, die Datumswerte zu verwenden und nicht in Zeichenfolgen zu zwingen.

Wenn Sie dies für die Aggregation wünschen oder anderweitig brauchen die Ergebnisse in einem Nur-Tages-Format, tun Sie dies dann mit $project und das Datum Operatoren :

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
    }}
])