MongoDB 3.6 और नए के साथ, आप $expr
. का उपयोग कर सकते हैं अपने find()
. में ऑपरेटर सवाल। यह आपको क्वेरी एक्सप्रेशन बनाने की अनुमति देता है जो $match
. में एक ही दस्तावेज़ के फ़ील्ड की तुलना करते हैं मंच।
db.customer.find({ "$expr": { "$eq": [{ "$month": "$bday" }, 9] } })
अन्य MongoDB संस्करणों के लिए, एक एकत्रीकरण पाइपलाइन चलाने पर विचार करें जो $redact
का उपयोग करता है ऑपरेटर के रूप में यह आपको एकल पाइपलाइन के साथ शामिल करने की अनुमति देता है, $project
. के साथ एक कार्यक्षमता एक फ़ील्ड बनाने के लिए जो दिनांक फ़ील्ड के महीने का प्रतिनिधित्व करता है और $match
सितंबर महीने की दी गई शर्त से मेल खाने वाले दस्तावेज़ों को फ़िल्टर करने के लिए।
उपरोक्त में, $redact
$cond
. का उपयोग करता है टेनरी ऑपरेटर के रूप में सशर्त अभिव्यक्ति प्रदान करने के साधन के रूप में जो सिस्टम वैरिएबल बनाएगा जो रिडक्शन करता है। $cond
. में तार्किक व्यंजक किसी दिए गए मान के साथ दिनांक ऑपरेटर फ़ील्ड की समानता की जांच करेगा, यदि वह मेल खाता है तो $redact
$$KEEP
. का उपयोग करके दस्तावेज़ लौटाएगा सिस्टम वैरिएबल और अन्यथा $$PRUNE
. का उपयोग करके त्याग देता है ।
निम्नलिखित पाइपलाइन को चलाने से आपको वांछित परिणाम मिलना चाहिए:
db.customer.aggregate([
{ "$match": { "bday": { "$exists": true } } },
{
"$redact": {
"$cond": [
{ "$eq": [{ "$month": "$bday" }, 9] },
"$$KEEP",
"$$PRUNE"
]
}
}
])
यह $project
. के समान है +$match
कॉम्बो लेकिन फिर आपको पाइपलाइन में जाने वाले बाकी सभी क्षेत्रों का चयन करना होगा:
db.customer.aggregate([
{ "$match": { "bday": { "$exists": true } } },
{
"$project": {
"month": { "$month": "$bday" },
"bday": 1,
"field1": 1,
"field2": 1,
.....
}
},
{ "$match": { "month": 9 } }
])
एक अन्य विकल्प के साथ, धीमी क्वेरी के बावजूद, find()
. का उपयोग करके $where
. के साथ विधि के रूप में:
db.customer.find({ "$where": "this.bday.getMonth() === 8" })