Jedním z přístupů je použití rámce agregace
, zejména $redact
operátor, který zbavuje tok dokumentů obsahu na základě hodnot v dokumentu a jeho poddokumentech. V závislosti na výsledku booleovského výrazu může být dokument odstraněn ze streamu, může být zahrnut do proudu poté, co byly zkontrolovány i jeho dílčí dokumenty, nebo může být do streamu předán celý. Myšlenka za $redact
je usnadnit odstraňování citlivých informací ze streamu.
Ve vašem případě výraz kritéria používá $cond
operátor a $and
booleovský operátor k vyjádření logického AND mezi časovými rozsahy s operátory porovnání $gt
a $lt
. Použijte $hodinu
operátor date, který vrátí hodinu pro date
pole jako číslo mezi 0 a 23. Vaše konečná agregace tedy vypadá takto:
db.collection.aggregate([
{
"$redact": {
"$cond": {
"if": {
"$and": [
{ "$gt": [ {"$hour": "$date"}, 4] },
{ "$lt": [ {"$hour": "$date"}, 8] }
]
},
"then": "$$KEEP",
"else": "$$PRUNE"
}
}
}
])
Ukázkový výstup:
/* 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
}