एक नियमित अभिव्यक्ति उस चीज़ पर काम नहीं करेगी जो एक स्ट्रिंग नहीं है। वास्तव में BSON दिनांक
selecting चुनने का कोई आसान तरीका नहीं है नियमित क्वेरी अभिव्यक्ति में विशुद्ध रूप से यह समय का मूल्य है।
ऐसा करने के लिए आपको एक $whereकी आपूर्ति करनी होगी कोड>
केवल समय . पर मिलान करने के लिए अतिरिक्त तर्क के साथ शर्त दिनांक मान का भाग।
वास्तव में प्रश्न में दिए गए डेटा के आधार पर:
db.getCollection('collection').remove({
"Id": "1585534",
"Type": NumberInt(42),
"$where": function() {
return this.InDate.getUTCHours() === 18
&& this.InDate.getUTCMinutes() === 30
}
})
जो निश्चित रूप से प्रदान किए गए डेटा में केवल पहला दस्तावेज़ है, भले ही यह वास्तव में "Id"
द्वारा पहचाना गया हो वैसे भी चूंकि वह मान दोनों के बीच अद्वितीय है।
.getUTCHours()
और .getUTCMinutes()
जावास्क्रिप्ट हैं Date
ऑब्जेक्ट विधियाँ, जो इस प्रकार एक BSON दिनांक
. है $where
में इस्तेमाल होने पर व्यक्त किया जाता है
अभिव्यक्ति।
सामान्य तौर पर, MongoDB 3.6 (लेखन के रूप में आगामी) की तुलना में अधिक कुशल रूप की अनुमति देता है। $कहां
एकत्रीकरण भाव में:
db.getCollection('collection').aggregate([
{ "$match": {
"Id": "1585534",
"Type": NumberInt(42),
"$expr": {
"$and": [
{ "$eq": [{ "$hour": "$InDate" }, 18 ] },
{ "$eq": [{ "$minute": "$InDate" }, 30] }
]
}
}}
])
हालांकि इस तरह के भाव सीधे जैसे तरीकों से इस्तेमाल नहीं किए जा सकते .निकालें ()
या .deleteMany()
, लेकिन $where
भाव कर सकते हैं।