Jag tror att du försöker hitta dokument med överlappande datumintervall. Med andra ord alla dokument vars start
eller end
datum ligger mellan ett givet datumintervall.
Du kan definitivt uppnå detta med lite matchning och logik.
Låt oss anta att jag har två dokument i min samling
{
"_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"
}
När jag kör följande kodbit
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());
Jag förstår
[
{
"_id" : ObjectId("56f6928c0c96eddb0a2c287f"),
"start" : "2015-03-27T16:00:00.000Z",
"end" : "2015-03-27T27:00:00.000Z"
}
]
Vilket är överlappande dokument för ett visst datumintervall. Hoppas att allt är vettigt. För bästa prestanda rekommenderar jag att du har index på båda start
och end
fält.