Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mongodb :Requête basée sur l'heure au format ISODate

Une approche consiste à utiliser le framework d'agrégation , en particulier le $redact opérateur qui supprime le flux de documents du contenu en fonction des valeurs du document et de ses sous-documents. Selon le résultat d'une expression booléenne, un document peut être élagué du flux, être inclus dans le flux après que ses sous-documents ont également été vérifiés, ou simplement passé complet dans le flux. L'idée derrière $redact est de faciliter la suppression des informations sensibles du flux.

Dans votre cas, l'expression des critères utilise le $cond et l'opérateur $and opérateur booléen pour exprimer le ET logique entre les plages de temps avec les opérateurs de comparaison $gt et $lt . Utilisez le $hour opérateur de date pour renvoyer l'heure pour la date champ sous la forme d'un nombre compris entre 0 et 23. Ainsi, votre agrégation finale ressemble à ceci :

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

Exemple de sortie :

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