Saya yakin Anda mencoba menemukan dokumen dengan rentang tanggal yang tumpang tindih. Dengan kata lain setiap dokumen yang start
atau end
tanggal berada di antara rentang tanggal tertentu.
Anda pasti dapat mencapai ini dengan sedikit kecocokan dan logika.
Mari kita asumsikan saya memiliki dua dokumen dalam koleksi saya
{
"_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"
}
Ketika saya mengeksekusi potongan kode berikut
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());
Saya mengerti
[
{
"_id" : ObjectId("56f6928c0c96eddb0a2c287f"),
"start" : "2015-03-27T16:00:00.000Z",
"end" : "2015-03-27T27:00:00.000Z"
}
]
Yang merupakan dokumen yang tumpang tindih untuk rentang tanggal tertentu. Semoga semuanya masuk akal. Untuk kinerja terbaik, saya akan merekomendasikan memiliki indeks di kedua start
dan end
bidang.