2013-05-25 1 views
9

シナリオ:私は以下のデータで、MyCollectionと呼ばれるコレクションを持っています考えてみましょう:ISOの日付が文字列フィールドに格納されているMongoDBコレクションの日付範囲をクエリする方法はありますか?

{ 
    "_id" : 'MyUniqueID_01' 
    "CreatedTime" : "2013-12-01T14:35:00Z", 
    "LastModifiedTime" : "2013-12-01T13:25:00Z" 
} 

今私は、データの前述の種類がドキュメントの膨大な数であるMongoDBのデータベースを照会します。そして、私のクエリは、日付範囲に基づいて、すなわちだから私のクエリのようなものかもしれ$gt$gte$lt & $lte

を使用して:上記の例を考えると

db.MyCollection.find({ 'CreatedTime': {$gt: '2013-05-25T09:29:40.572Z'}}) 

予想結果は、クエリが取得する必要があり"2013-05-01T14:35:00Z"がクエリ '2013-05-25T09:29:40.572Z'で渡された値よりも大きいため、 "CreatedTime"一方、問題はフィールドCreatedTimeが文字列形式であることです。

質問:文字列のフィールドタイプを変更せずに期待した結果を得ることができる方法はありますか?

+1

これらのようなISO 8601日時文字列は、日付範囲クエリで正常に動作するはずです。これはフォーマットの利点の1つです。サンプルクエリは、期待どおりにサンプルドキュメントを返します。 – JohnnyHK

+0

@ JohnnyHK:ありがと...正確にそれは私のローカルDBで動作しますが、同じクエリが失敗してライブサーバ上で期待どおりになっています..バージョンの依存関係はありますか? –

+0

@AmolMKulkarni好奇心の渦中に、なぜそれがサーバ上で動作しなかったのか分かりましたか?私は時間の範囲の間に照会に取り組んでおり、検索中にこれを見つけました。 – Raghuveer

答えて

9

例のように正確にクエリを実行できます。

文字列の順序は一貫しており、必要な正確な関係を提供します。

+3

はい、しかし、私は、クエリ文字列はデータセットと同じタイムゾーン接尾辞を使わなければならないOPの例はISO 8601のUTC形式( 'Z'接尾辞付き)であるため、クエリー文字列(つまり、データ文字列を格納する方法に別の制約が追加されています)その形にする必要があります。 –

関連する問題