2017-02-16 9 views
0

とモンゴ3でネストされた値を検索:私が行うことができるようにしたいどのような私はこのようになります私のMongoのコレクション内のドキュメント持っているのjava

{ 
    "timestamp": 1460442540, 
    "page": "home", 
    "misc": { 
      "color": "red", 
      "light": "off" 
      } 
} 

misc.colorの値を返すですある条件がページで満たされています。

これは私が持っているものです。

//find my query match 
    Document value = mongoDBService.getCollection(collectionName) 
      .find(eq("page", "home")).first(); 

    //prints json described above 
    LOG.info(value.toString()); 

    //prints "misc" subdocument 
    LOG.info(value.get("misc").toString()); 

    //null pointer 
    LOG.info(value.get("misc.color").toString()); 

は、私が行方不明です、ここでドット表記を処理するためのいくつかの方法はありますか?理想的には、このクエリを動的にすることで、ドット表記の値やより高いレベルの値を扱うことができます。

私はmongodb-driver 3.4.2を使用しています。

答えて

3

あなたは以下のコードを更新することができます。

Document value = mongoDBService.getCollection(collectionName) 
      .find(eq("page", "home")).first(); 

LOG.info(value.get("misc", Document.class).getString("color")); 
+0

**は** eq **メソッドですか? – subash

+0

ごめんなさい。とった。その**フィルタ**クラスです。それは私に別のGoogle検索を必要としました。あなたが指定した場合、それはより助けになります – subash

0

あなたはこれを試すことができます。

BasicDBObject query = (BasicDBObject)(value.get("misc")).getString("color"); 
関連する問題