2012-08-28 7 views
5

サブ文書からキーの値を取得しようとしていますが、キーが2つ埋め込まれているため、BasicDBObject.get()関数を使用する方法がわかりません。深いレベル。ファイルの構造は次のとおりですJava MongoDBサブ文書の値を取得する

File { 
    name: file_1 
    report: { 
     name: report_1, 
     group: RnD 
    } 
} 

基本的にファイルには複数のレポートがあり、特定のファイル内のすべてのレポートの名前を取得する必要があります。 BasicDBObject.get("name")を実行することができます。値 "file_1"を取得できますが、どうすればこのようなことができますか?BasicDBObject.get("report.name")?私はそれを試みたが、うまくいかなかった。

+0

実際に何が起こったのでしょうか? – Mark

+0

作業が終わっても何も返されませんでした。 – Dhruv

答えて

10

「レポート」オブジェクトを取得し、その内容にアクセスする必要があります。サンプルコードは、以下のとおりです。

DBCursor cur = coll.find(); 

for (DBObject doc : cur) { 
    String fileName = (String) doc.get("name"); 
    System.out.println(fileName); 

    DBObject report = (BasicDBObject) doc.get("report"); 
    String reportName = (String) report.get("name"); 
    System.out.println(reportName); 
} 
+0

これを試してみます。どうもありがとう。 – Dhruv

+0

どのようにJongo APIを使用して行うことができますか? –

3

私は(そうでない場合は、私がいることが含まれているだろうリンクを保存didntは)別のポストに、それを行うための第二の方法を発見しました。

(BasicDBObject)(query.get("report")).getString("name") 

クエリ=(BasicDBObject)cursor.next()

+1

これは私が書いたのと同じです.2行の代わりに、1行でクエリを書いています。 –

1

あなたはこれを試すことができ、これは私のために

ます。また、場合のように、クエリを使用することができます

BasicDBObject query = new BasicDBObject("report.name", "some value");

+0

サブ文書のフィールドを照会するために、このドット表記を使用すると、私にとっては完璧に機能しました。ありがとう。 – splungebob

1

を働きましたMongoTemplateの...

Query query = new Query(Criteria.where("report.name").is("some value")); 
関連する問題