Je crois que vous essayez de trouver des documents avec des plages de dates qui se chevauchent. Autrement dit tout document dont le start
ou end
les dates se situent entre la plage de dates donnée.
Vous pouvez certainement y parvenir avec un peu de correspondance et de logique.
Supposons que j'ai deux documents dans ma collection
{
"_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"
}
Lorsque j'exécute le morceau de code suivant
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());
je reçois
[
{
"_id" : ObjectId("56f6928c0c96eddb0a2c287f"),
"start" : "2015-03-27T16:00:00.000Z",
"end" : "2015-03-27T27:00:00.000Z"
}
]
Qui est un document qui se chevauche pour une plage de dates donnée. J'espère que tout a du sens. Pour de meilleures performances, je recommanderai d'avoir un index sur start
et end
champs.