1つのアプローチは、集約フレームワークを使用することです。
、特に $ redact
ドキュメントとそのサブドキュメント内の値に基づいてコンテンツのドキュメントストリームを削除する演算子。ブール式の結果に応じて、ドキュメントをストリームから削除したり、サブドキュメントもチェックされた後にストリームに含めたり、完全にストリームに渡したりすることができます。 $ redact
の背後にある考え方
ストリームから機密情報を簡単に削除できるようにすることです。
あなたの場合、基準式は $ cond
演算子と $ and
$ gt
$ lt
>
$ hour コード>
date
の時間を返す日付演算子 フィールドは0から23までの数値です。したがって、最終的な集計は次のようになります。
db.collection.aggregate([
{
"$redact": {
"$cond": {
"if": {
"$and": [
{ "$gt": [ {"$hour": "$date"}, 4] },
{ "$lt": [ {"$hour": "$date"}, 8] }
]
},
"then": "$$KEEP",
"else": "$$PRUNE"
}
}
}
])
サンプル出力:
/* 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
}