Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

MongoDBからのデータ取得について

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として全て取得してしまいます。
下層データを取得する方法はありませんでしょうか?

1

回答

187

閲覧

1件の回答

評価

0

投稿主です。自己解決しましたので参考にソースを。
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);
}

この方法ならどんなに深い階層でも取得できそうです。

回答する

ログインしていません。

ログインしなくても回答はできますが、ログインすると、質問・回答の管理、更新があった場合のメールでの通知を受けることができます。 アカウントをお持ちでない方は会員登録を行ってください。

ユーザ名匿名