sql >> Database teknologi >  >> RDS >> Mysql

Mongodb :Forespørgsel baseret på tid i ISODate-format

En tilgang er at bruge aggregeringsramme , især $redact operatør, der fjerner dokumentstrømmen for indhold baseret på værdier i dokumentet og dets underdokumenter. Afhængigt af resultatet af et boolesk udtryk, kan et dokument beskæres fra strømmen, inkluderes i strømmen, efter at dets underdokumenter også er blevet kontrolleret, eller bare sendes komplet ind i strømmen. Idéen bag $redact er at gøre det let at fjerne følsomme oplysninger fra streamen.

I dit tilfælde bruger kriterieudtrykket $cond operatøren og $and boolesk operator til at udtrykke den logiske AND mellem tidsintervallerne med sammenligningsoperatorerne $gt og $lt . Brug $hour datooperatør for at returnere timen for datoen felt som et tal mellem 0 og 23. Din endelige aggregering ser således ud:

db.collection.aggregate([
    {
        "$redact": {
            "$cond": {
                "if": { 
                    "$and": [
                        { "$gt": [ {"$hour": "$date"}, 4] },
                        { "$lt": [ {"$hour": "$date"}, 8] }
                    ]                 
                },
                "then": "$$KEEP",
                "else": "$$PRUNE"
            }
        }        
    }
])

Eksempeloutput:

/* 0 */
{
    "result" : [ 
        {
            "_id" : ObjectId("56404450472fe25cc6b85886"),
            "date" : ISODate("2015-11-09T05:58:19.474Z")
        }, 
        {
            "_id" : ObjectId("56404450472fe25cc6b85887"),
            "date" : ISODate("2014-10-25T07:30:00.241Z")
        }
    ],
    "ok" : 1
}



  1. Definer dynamisk klassenavn i peewee-modellen

  2. Slip SQL Server-database gennem C#

  3. Sådan opretter du en tabel i MySQL

  4. Autoincrement-lignende felt for objekter med den samme fremmednøgle (Django 1.8, MySQL 5.5)