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
}