एक तरीका है एकत्रीकरण ढांचे का उपयोग करना
, विशेष रूप से $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
}