sql >> Database >  >> NoSQL >> MongoDB

Mogelijk om datumreeksen in mongodb te vergelijken?

Als u records wilt selecteren, gebruik dan een datumbereik:

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

En dat selecteert alle opgenomen uren, minuten enz. die tussen de twee datums vallen.

Dus je zou probeer de datumwaarden te gebruiken en niet in strings te dwingen.

Als je dit wilt voor het doen van aggregatie of anderszins nodig de resultaten in een dagformaat, doe dit dan met $project en de datum 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
    }}
])



  1. MongoDB segmenteert query in golang

  2. Mongoose:heeft geen toegang tot de ingevulde waarde

  3. MongoDB $ en operatorquery in PHP

  4. Mongoose - Verhoog een waarde binnen een array van objecten