sql >> Base de Datos >  >> RDS >> Mysql

Mongodb:Consulta basada en tiempo en formato ISODate

Un enfoque es usar el marco de agregación , en particular, el $redact operador que elimina el flujo de contenido del documento en función de los valores dentro del documento y sus subdocumentos. Dependiendo del resultado de una expresión booleana, un documento puede eliminarse del flujo, incluirse en el flujo después de que también se hayan verificado sus subdocumentos o simplemente pasarse completo al flujo. La idea detrás de $redact es facilitar la eliminación de información confidencial de la transmisión.

En su caso, la expresión de criterios utiliza el $cond operador y el $and operador booleano para expresar el AND lógico entre los rangos de tiempo con los operadores de comparación #exp._S_gt">$gt y $lt . Use el $hour operador de fecha para devolver la hora de la date campo como un número entre 0 y 23. Por lo tanto, su agregación final se ve así:

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

Salida de muestra:

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