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

Mongodb :query basata sull'ora in formato ISODate

Un approccio consiste nell'utilizzare il framework di aggregazione , in particolare il $redact operatore che elimina il contenuto del flusso di documenti in base ai valori all'interno del documento e dei suoi documenti secondari. A seconda del risultato di un'espressione booleana, un documento può essere eliminato dallo stream, essere incluso nello stream dopo che anche i suoi documenti secondari sono stati controllati o semplicemente passato allo stream completo. L'idea alla base di $redact è rendere facile la rimozione di informazioni sensibili dallo stream.

Nel tuo caso, l'espressione dei criteri utilizza $cond operatore e $and operatore booleano per esprimere l'AND logico tra gli intervalli di tempo con gli operatori di confronto $gt e $lt . Usa $hour date per restituire l'ora per la date campo come un numero compreso tra 0 e 23. Quindi la tua aggregazione finale è simile a questa:

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

Risultato di esempio:

/* 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
}