質問: MongoDBに以下のようなBSONデータが格納されている状態です。 { "_id" : ObjectId("XXXXXXXXX"), "TESTDATA" : [ { "A" : "AXXXXXXXXXA1", "B" : 0, "C" : 0, "D" : 0 }, { "A" : "AXXXXXXXXXA2", "B" : 1, "C" : 1, "D" : 1 }, ], "AA" : "XXXXX", "BB" : 00, "CC" : "XXXXXXXXXXXXXX", "DD" : "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "TIMESTAMP" : ISODate("2017-XX-XXTXX:XX:XX.XXXZ") } find条件で上記二つのデータを取得し、Document形式のcursorを生成しました。 while(cursor.hasNext()){ } で "TESTDATA"を一つずつ出力できるところまではできてます。 TESTDATA:[Document{{A=AXXXXXXXXXA1, B=0, C=0, D=0}}, Document{{A=AXXXXXXXXXA2, B=0, C=0, D=0}}] 以下同じ様なBSON形式のデータが格納されているのですが・・・。 何がしたいかと言うと、 TESTDATA:[Document{{A=AXXXXXXXXXA1, B=0, C=0, D=0}}, Document{{A=AXXXXXXXXXA2, B=0, C=0, D=0}}] このデータの最初の「A」の値(AXXXXXXXXXA1)のみを取得し判定する処理を実装したいと考えております。 上層にあるTIMESTAMPや、_id、AA、BB等の値は取得できますが下層のデータを取得しようとすると、TESTDATAとして全て取得してしまいます。 下層データを取得する方法はありませんでしょうか?
回答: 投稿主です。自己解決しましたので参考にソースを。 while(cursor.hasNext()){ Document doc = (Document) cursor.next(); List list = (List) doc.get("TESTDATA"); //第一階層(TESTDATA以下)のドキュメントを取得しリストへ格納 Document doc2 = (Document) list.get(0); //0番目の要素を指定しDocへ格納 //doc2 = {"A" : "AXXXXXXXXXA1","B" : 0,"C" : 0,"D" : 0 }の状態 String str = (String) doc2.get("A").toString(); //Document 要素"A"を指定すると"AXXXXXXXXXA1"だけが取れる。 System.out.println("str:"+str); } この方法ならどんなに深い階層でも取得できそうです。