あなたは、日付範囲が重複しているドキュメントを探していると思います。つまり、start
またはend
の日付が指定された日付の範囲内にあるドキュメントです。
少しのマッチとロジックで確実にこれを達成できます。
のは、私が
{
"_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"
}
私は与えられた日付の文書を重ねている
[
{
"_id" : ObjectId("56f6928c0c96eddb0a2c287f"),
"start" : "2015-03-27T16:00:00.000Z",
"end" : "2015-03-27T27:00:00.000Z"
}
]
を取得
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());
コードの一部次のコマンドを実行し、私のコレクションの中に二つの文書を持っていると仮定しましょう範囲。それはすべて意味があることを願っています。最高のパフォーマンスを得るには、start
とend
の両方のフィールドにインデックスを付けることをおすすめします。
私はあなたの質問を正しく理解しているかどうかわかりません。 「交差期間」とは何ですか?これらのコードスニペットの1つがクエリですか?または、異なる文書の両方であり、日付範囲が重複する文書を検索する場合は、 – Philipp