समय ओवरलैप को नीचे दिए गए चित्र में इन 4 मामलों के साथ चित्रित किया जा सकता है, जहां S/E नए दस्तावेज़ का प्रारंभ/समाप्ति दिनांक है और S'/E' किसी भी मौजूदा दस्तावेज़ की प्रारंभ/समाप्ति तिथि है:
S' E'
|-------------------|
S E
|****************|
S' E'
|-----------|
S' E'
|-----------|
S' E'
|-----------|
4 मामलों में हमारे पास S'<E
. है और E'>S
. ओवरलैप किए गए समय के साथ सभी दस्तावेज़ों को खोजने की क्वेरी हो सकती है:
db.collection.find({"startdate": {"$lt": E}, "enddate": {"$gt": S}})
संपादित करें:
आपकी प्रारंभ तिथि और समाप्ति तिथि स्ट्रिंग प्रारूप में है, और शाब्दिक रूप से आदेशित नहीं है, इसलिए तुलना के लिए "$gt" और "$lt" का उपयोग नहीं किया जा सकता है। आपको उन्हें दिनांक प्रकार में बदलना चाहिए:
db.collection.find().forEach(
function (e) {
// convert date if it is a string
if (typeof e.startdate === 'string') {
e.startdate = new Date(e.startdate);
}
if (typeof e.enddate === 'string') {
e.enddate = new Date(e.enddate);
}
// save the updated document
db.collection.save(e);
}
)
अंतिम प्रश्न होगा:
db.collection.find({"startdate": {"$lt": new Date("E")}, "enddate": {"$gt": new Date("S")}})