2017-01-25 13 views
0

Javaを使用してmongodbのISODateフィールドを検索する際に問題があります。私は正確に一致する日付を探したい。Javaを使用したMongoDB ISODateフィールド検索

私は最初のコレクションを照会し、ISODateフィールドの "タイムスタンプ"を取得します。この日付を取得すると、同じ「タイムスタンプ」値​​を持つ別のコレクションを検索したいと考えています。

FindIterable<Document> docList = thermalComfortCollection.find(); 
    for(Document doc: docList) { 

     String ts = doc.get("Timestamp").toString(); 
     System.out.println(ts); 

...

それは私が検索したい別の形式で私の日付を返しますので、私はISODateをフォーマットしています。そのため、私はこのパターン「:MM:YYYY-MM-DD HH SS」に変換しています

 final DateTimeFormatter inputFormat = 
       DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy"); 

     // The parsed date 
     final ZonedDateTime parsed = ZonedDateTime.parse(ts, inputFormat); 

     // The output format 
     final DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 
     String date = outputFormat.format(parsed); 

私はISODateタイプと完全に一致文を書く方法を見つけることができませんでしたので、私はGTEとLTEの両方を入れています正確なマッチを得るための条件..!

 BasicDBObject query = new BasicDBObject("Timestamp", // 
          new BasicDBObject("$gte", date).append("$lte", date)); 
       System.out.println(query); 

クエリが機能していません。私のコードの一部が間違っているコメントを教えてください。

答えて

0

MongoDBはすべての日付をタイムゾーンでUTCに保存するので、DateインスタンスでタイムゾーンをUTCに設定してクエリする必要があります。

レッツ・日これは、Javaからそれを照会するにはMongoDBの

{ "_id" : ObjectId("58886fa477717752e6eff16b"), "dd" : ISODate("2017-01-25T09:28:04.041Z") } 

で私のドキュメントであり、私がやる:

String dateStr = "2017-01-25 09:28:04.041 UTC"; 
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS ZZZ").parse(dateStr); 
BasicDBObject filter = new BasicDBObject("dd", date); 
coll.find(filter); 
+0

ありがとうございます!私は自分のコードに問題があることを発見しました。なぜなら、日付付きのフィルタを正しく配置しなかったからです。 – ejshin1

2

あなたは日付ではない彼らの文字列形式を比較しています。

たとえば、以下のタイムスタンプを比較する。

{ "timestamp" : ISODate("2017-01-25T09:28:04.041Z") } 

コード:

Instant instant = Instant.parse("2017-01-25T09:28:04.041Z"); //Pass your date. 

Date timestamp = Date.from(instant); 

問合せ:

Document query = Filters.eq("timestamp", timestamp); 
+0

このコードを使用すると、エラーがスローされます。_java.time.format.DateTimeParseException:テキスト 'Wed Dec 21 05:45:00 PST 2016'をインデックス0で解析できませんでした。 – ejshin1

+0

日付を文字列として入力していますか?あなたの日時にタイムゾーンがあるように見えます。 'ZonedDateTime - Instant - Date'の構文解析 – Veeram

+0

私は最初に日付を文字列として入力します。それは日付構造でなければなりません、ありがとう! – ejshin1

関連する問題