मेरा मानना है कि आप अतिव्यापी दिनांक सीमाओं वाले दस्तावेज़ ढूँढ़ने का प्रयास कर रहे हैं। दूसरे शब्दों में कोई भी दस्तावेज़ जिसका start
या end
तिथियां दी गई तिथि सीमा के बीच में आती हैं।
आप निश्चित रूप से इसे थोड़ा सा मिलान और तर्क के साथ हासिल कर सकते हैं।
मान लें कि मेरे संग्रह में दो दस्तावेज़ हैं
{
"_id" : ObjectId("56f692730c96eddb0a2c287e"),
"start" : "2015-03-27T15:00:00.000Z",
"end" : "2015-03-27T17:00:00.000Z"
}
{
"_id" : ObjectId("56f6928c0c96eddb0a2c287f"),
"start" : "2015-03-27T16:00:00.000Z",
"end" : "2015-03-27T27:00:00.000Z"
}
जब मैं कोड के निम्नलिखित भाग को निष्पादित करता हूं
var startDate = "2015-03-27T20:00:00.000Z";
var endDate = "2015-03-27T21:00:00.000Z";
var findOverlapingDates = function(startDate, endDate){
return db.collection.find({
$or: [
{$and: [
{start:{$gte: startDate}}, {start:{$lte: endDate}}
]},
{start:{$lte: startDate}, end:{$gte: startDate}}
]
});
};
printjson(findOverlapingDates(startDate, endDate).toArray());
मुझे मिलता है
[
{
"_id" : ObjectId("56f6928c0c96eddb0a2c287f"),
"start" : "2015-03-27T16:00:00.000Z",
"end" : "2015-03-27T27:00:00.000Z"
}
]
जो दी गई तिथि सीमा के लिए अतिव्यापी दस्तावेज है। आशा है कि यह सब समझ में आता है। सर्वश्रेष्ठ प्रदर्शन के लिए, मैं आपको start
. दोनों पर अनुक्रमणिका रखने की सलाह दूंगा और end
फ़ील्ड।