2012-06-14 8 views
5

「日付」が2つの日付の間にあるドキュメントのためにmongodbを照会しようとしています。 サンプルデータは、次のとおりです。MongoDB Javaでの日付による問い合わせ

DBCursor cursor = null; 
DB db = connect(); 

    Date startDate = new Date(System.currentTimeMillis() - (long)(numOfTimePeriods+1)*time); 
    Date endDate = new Date(System.currentTimeMillis() - (long)numOfTimePeriods*time); 
    DBObject query = new BasicDBObject(); 
    query.put("date", new BasicDBObject("$gt", startDate).append("$lte", endDate)); 

    cursor = db.getCollection("status").find(query); 

が、カーソルオブジェクトは結果を持っていない:

{ 
     "_id" : ObjectId("4fad0af6709fbc1d481c3e05"), 
     "ID" : NumberLong("200930746205085696"), 
     "text" : "Forgot my charger...:(", 
     "date" : ISODate("2012-06-14T10:49:57Z"), 
     "sentiment" : "NEG" 
} 

私のJavaコードがあります。

Queryオブジェクトは、次のようになります。

{ "date" : { "$gt" : { "$date" : "2012-05-15T00:16:15.184Z"} , "$lte" : { "$date" : "2012-06-14T10:16:15.184Z"}}} 

私はこの問題は、DBの日付の表現であると思います。 これに関するご提案はありますか?

+1

これはうまくいきました。データを再確認できますか? – Thilo

+0

はい、そうです、うまくいくようです!問題はデータだった、私はフェッチする文書がないために期間を照会した。愚かな私! ありがとうございました! – andjelko

+0

それはすでにそこに解決ちょうど http://stackoverflow.com/questions/6840540/java-mongodb-query-by-date を見てみましょう。 – josete

答えて

-1

質問にand operatorを使用する予定はありませんか?

db.foo.find({ $and: [ { date: { $gt: startDate } }, {date : { $lt: endDate} } ] }) 
+0

いいえ、私はクエリがうまくいたと思います。私も非常に似たものを使います。 – Thilo

+0

$、値を追加するとプロパティに暗黙指定されますか? – jocelyn

+0

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%3C%2C%3C%3D%2C%3E%2C%3E%3D "これらの演算子を組み合わせて範囲を指定することもできますこれが一般的な場合(他の演算子でも)動作するかどうかは不明です。時間があれば、$ gtと$ ninを組み合わせることはできますか? – Thilo

1

その$ date表現は、JavaドライバのDateのtoString表現に過ぎません。これは、拡張された10gen BSONではなく、厳密なJSON/BSON表現を使用します。ここで、値はシェル内にあるように表現されたオブジェクトです。そのようなtoString出力を使用してシェルでクエリを実行しようとするべきではありません。なぜなら、多くのケースでは機能しないからです。

関連する問題