Credo che tu stia cercando di trovare documenti con intervalli di date sovrapposti. In altre parole, qualsiasi documento il cui start
o end
le date rientrano nell'intervallo di date specificato.
Puoi sicuramente raggiungere questo obiettivo con un po' di corrispondenza e logica.
Supponiamo di avere due documenti nella mia collezione
{
"_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"
}
Quando eseguo il seguente pezzo di codice
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());
ottengo
[
{
"_id" : ObjectId("56f6928c0c96eddb0a2c287f"),
"start" : "2015-03-27T16:00:00.000Z",
"end" : "2015-03-27T27:00:00.000Z"
}
]
Quale documento si sovrappone per un determinato intervallo di date. Spero che tutto abbia un senso. Per prestazioni ottimali, ti consiglio di avere l'indice su entrambi start
e end
campi.