6

サブドキュメントからキーの値を取得しようとしていますが、キーが 2 レベルの深さで埋め込まれているため、BasicDBObject.get() 関数の使用方法がわかりません。これがドキュメントの構造です

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

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

4

4 に答える 4

11

最初に「レポート」オブジェクトを取得してから、そのコンテンツにアクセスする必要があります。以下のサンプル コードを参照してください。

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);
}
于 2012-08-29T06:37:39.303 に答える
2

MongoTemplate などの場合のように、クエリを使用することもできます...

Query query = new Query(Criteria.where("report.name").is("some value"));
于 2015-05-16T07:47:30.093 に答える
2

別の投稿で、2番目の方法を見つけました(リンクを保存しなかった場合は、リンクを含めたはずです)。

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

where query = (BasicDBObject) cursor.next()

于 2012-08-29T19:30:00.257 に答える
1

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

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

于 2013-02-13T21:30:40.260 に答える