sql >> Databasteknik >  >> RDS >> Mysql

Mongodb :Fråga baserad på tid i ISODate-format

En metod är att använda aggregationsramverket , särskilt $redact operatör som tar bort dokumentströmmen från innehåll baserat på värden i dokumentet och dess underdokument. Beroende på resultatet av ett booleskt uttryck kan ett dokument beskäras från flödet, inkluderas i flödet efter att dess underdokument också har kontrollerats, eller bara skickas komplett till flödet. Tanken bakom $redact är att göra det enkelt att ta bort känslig information från strömmen.

I ditt fall använder kriterieuttrycket $cond operatorn och $and boolesk operator för att uttrycka den logiska AND mellan tidsintervallen med jämförelseoperatorerna $gt och $lt . Använd $hour datumoperator för att returnera timmen för datum fältet som ett tal mellan 0 och 23. Din slutliga aggregering ser alltså ut så här:

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

Exempel på utdata:

/* 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. SQLSTATE[HY000] [1045] Åtkomst nekad för användaren 'användarnamn'@'localhost' med CakePHP

  2. PHP:Söka i mysql-databasen med hjälp av rullgardinslistor med flera val?

  3. Doktrin 2:Olika beteenden för att ta bort och bevara relaterade enheter

  4. Tabellvärderad funktion med flera påståenden vs inline-värderad tabellfunktion