Uma abordagem é usar a estrutura de agregação , em particular o
$redact
operador que retira o fluxo do documento de conteúdo com base em valores dentro do documento e seus subdocumentos. Dependendo do resultado de uma expressão booleana, um documento pode ser removido do fluxo, ser incluído no fluxo após seus subdocumentos também terem sido verificados ou apenas passado completo para o fluxo. A ideia por trás do $redact
é facilitar a remoção de informações confidenciais do fluxo. No seu caso, a expressão de critérios usa o
$cond
operador e $and
operador booleano para expressar o AND lógico entre os intervalos de tempo com os operadores de comparação $gt
e $lt
. Use o $hour
operador de data para retornar a hora do data
campo como um número entre 0 e 23. Assim, sua agregação final fica assim:db.collection.aggregate([
{
"$redact": {
"$cond": {
"if": {
"$and": [
{ "$gt": [ {"$hour": "$date"}, 4] },
{ "$lt": [ {"$hour": "$date"}, 8] }
]
},
"then": "$$KEEP",
"else": "$$PRUNE"
}
}
}
])
Saída de amostra:
/* 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
}