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
}