Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mongodb :Abfrage basierend auf Zeit im ISODate-Format

Ein Ansatz ist die Verwendung des Aggregation Framework , insbesondere $redact -Operator, der den Inhalt des Dokumentstroms basierend auf Werten innerhalb des Dokuments und seiner Unterdokumente entfernt. Abhängig vom Ergebnis eines booleschen Ausdrucks kann ein Dokument aus dem Stream entfernt, in den Stream aufgenommen werden, nachdem auch seine Unterdokumente geprüft wurden, oder einfach vollständig in den Stream übergeben werden. Die Idee hinter $redact soll das Entfernen vertraulicher Informationen aus dem Stream vereinfachen.

In Ihrem Fall verwendet der Kriterienausdruck $cond -Operator und $and boolescher Operator zum Ausdrücken des logischen UND zwischen den Zeitbereichen mit den Vergleichsoperatoren $gt und $lt . Verwenden Sie den $hour Datumsoperator, um die Stunde für das date zurückzugeben Feld als Zahl zwischen 0 und 23. Ihre endgültige Aggregation sieht also so aus:

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

Beispielausgabe:

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