2013-08-20 7 views
5

MongoDBには、何かが現在のものであるかどうかを定義する2つの日付を持つコレクションがあります。だから、私はnullにすることができる "end_date"を持っているか、時間の値を持つかもしれません。現在の値がnullのend_dateまたは将来の時刻のアイテム。私のクエリは次のようになります:MongoDB - 値がnullまたはX未満の結果を返します

program_enrollments.find({"start_date":{"$lte":1376982000},"end_date":[null,{"$gte ":1376982000}],"client":"52002d02cc94a31a0f000000"}, []) 

これは私には正しいようですが、私は別のアプローチが必要ですか?私はそれが避けることができる場合、日付が最新であるかどうかを示すブール値フラグを持つことは望ましくありません。

答えて

9

操作の配列を受け入れる$or操作を探しています。それはそうのようになる:あなたの全体のクエリは次のようになり

$or: [{end_date: null}, {end_date: {$gte: 1376982000}}] 

:スケールに

program_enrollments.find({ 
    start_date: {$lte: 1376982000}, 
    $or: [ 
    {end_date: null}, 
    {end_date: {$gte: 1376982000}} 
    ], 
    client:"52002d02cc94a31a0f000000" 
}) 

、あなたは$gte$lte演算子のいずれかを削除する方法を見つけることになるでしょう。 MongoDBは、クエリ内の異なる属性に対して$lte$gteの組み合わせを使用することはできません。

0

{end_date: null}の代わりに、変数が存在するかどうかを{end_data: {$exists: false}}と尋ねることができます。ドキュメント内にnullという値のend_dateがある場合は、最初の値と2番目の値は一致しません。

+1

'{end_date:null}'は、フィールドが省略されて単に存在しなかったコーナーケースもカバーしていました。{end_data:{$ exists:false}} ' v3.0でテスト済み – pulkitsinghal

関連する問題