そのため、イベントの開始時刻と終了時刻を格納するコレクションがあり、ユーザーが「フィルター」の開始時刻と終了時刻を指定してイベントを照会できるようにしたいと考えています。クエリは、フィルター時間と交差するすべてのイベントを返す必要があります。クエリを正しく作成していると思っていましたが、必要な結果が返されません。
サンプルデータ (アイデアを得るために単純化された mongo ドキュメント、時間は HHMMSS):
{ ..., "start" : "050520", "end" : "051309" } //Should match
{ ..., "start" : "051125", "end" : "051925" } //Should match
{ ..., "start" : "052049", "end" : "052420" } //Should match
{ ..., "start" : "050000", "end" : "050500" }
{ ..., "start" : "052100", "end" : "052721" }
私が試したクエリは次のとおりです(ここで括弧を逃した場合は許してください。それは問題ではありません):
find( { $or : [
{ start : { $gte : "050600", $lt : "052100" } },
{ end : { $lt : "052100", $gt : "050600" } }
] } )
3 つの結果のうちの 1 つだけが返されました。$or パーツの順序を切り替える (開始時間の前に終了時間に対してクエリを実行する) と、2 つの結果が得られますが、3 つすべてではありません。複合クエリの場合、クエリの2番目の部分を適用する前に、最初の部分と一致しない結果をmongoが破棄することを読んだことを覚えているようですが、 $or 演算子がそれを処理すると思いました。何か案は?私のクエリは間違っていますか? これは mongo でのクエリの制限ですか?