2016-03-26 7 views
1

みんな!MongoDBの他の日付範囲と重複するすべての日付範囲を見つける方法は?

私はこのタイプのレコードを持っている:

{ 
    start: 2015-03-27T15:00:00.000Z, 
    end: 2015-03-27T17:00:00.000Z 
} 

とデータベースの横断期間内で検索しようとしています。

{ 
    start: 2015-03-27T15:30:00.000Z, 
    end: 2015-03-27T16:00:00.000Z 
} 

私はシステムをスケジューリングします。そして、私はある時間占領されていませんでした。

+0

私はあなたの質問を正しく理解しているかどうかわかりません。 「交差期間」とは何ですか?これらのコードスニペットの1つがクエリですか?または、異なる文書の両方であり、日付範囲が重複する文書を検索する場合は、 – Philipp

答えて

0

あなたは、日付範囲が重複しているドキュメントを探していると思います。つまり、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()); 

コードの一部次のコマンドを実行し、私のコレクションの中に二つの文書を持っていると仮定しましょう範囲。それはすべて意味があることを願っています。最高のパフォーマンスを得るには、startendの両方のフィールドにインデックスを付けることをおすすめします。

+0

OPが求めているものではないので、誰も答えなかった理由は明らかであるはずです。彼らは、データ内で発生する「重複」を「識別」することを期待しています。したがって、特定の時間範囲を照会せずに上記の2つのレコードが「重複」していることを示します。 –

関連する問題