Ich glaube, Sie versuchen, Dokumente mit sich überschneidenden Datumsbereichen zu finden. Mit anderen Worten jedes Dokument, dessen start
oder end
Daten liegen zwischen dem angegebenen Datumsbereich.
Sie können dies definitiv mit ein wenig Übereinstimmung und Logik erreichen.
Nehmen wir an, ich habe zwei Dokumente in meiner Sammlung
{
"_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"
}
Wenn ich folgenden Codeabschnitt ausführe
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());
Ich bekomme
[
{
"_id" : ObjectId("56f6928c0c96eddb0a2c287f"),
"start" : "2015-03-27T16:00:00.000Z",
"end" : "2015-03-27T27:00:00.000Z"
}
]
Welches ist ein überlappendes Dokument für einen bestimmten Datumsbereich. Hoffe es macht alles Sinn. Für die beste Leistung empfehle ich, einen Index auf beiden start
zu haben und end
Felder.