嵌入式数组检索Mongodb Java

时间:2012-12-26 00:07:54

标签: java mongodb

我一直试图得到这个问题,但我无法对此问题表示不满。

对象看起来像这样:

{
   restaurantName:'abc',
   reviews:[
              {
                 text:'Its awesome!'
                 person: 'John Doe'
              }
              {
                 text:'Nice Ambience'
                 person: 'Davis'
              }

           ]
}

目的是找出文档中的所有评论文本。如何使用Mongo的JAVA驱动程序执行此操作。我一直在获得Class Cast Exceptions

以下是代码:

设置fields = new TreeSet();

BasicDBList e ;
    try {
        DBObject dbObject;
        while (cursor.hasNext()) {
        doc = new Document();
         e = (BasicDBList) cursor.next().get("reviews");
          for(BasicDBObject temp: e){
               fields.addAll(temp.keySet());
           }
        }
          //System.out.println(cursor.next());
        }

我得到的错误是:

Exception in thread "main" java.lang.ClassCastException: com.mongodb.BasicDBObject cannot be cast to java.util.ArrayList at org.poly.darshan.utils.DataExtractor.main(DataExtractor.java:57)

上面提到的代码旨在找到子对象中存在的唯一字段。但问题或多或少是一样的。

1 个答案:

答案 0 :(得分:0)

好的找到了解决方案。在我的情况下,我知道字段名称,所以我可以检索DBObject,然后检查每个字段名称并相应地进行类型转换以检索它。 *想知道Javascript的仙境是多么自由。幸运的是,在Java中,我们总是知道自己会得到什么。:)

解决方案看起来像这样:

while (cursor.hasNext()) {
        doc = new Document();
        e = cursor.next();
        for (String field : e.keySet()) {
            if (field.equals("reviews")) {
            BSONObject temp = (BSONObject) e.get(field);
            System.out.println(temp.toString());
            }
                 //else print the other String values
        }
}

如果检索到BSOONList,则相应地进行类型转换。 BSONList可能包含BSONList或BSONObject,因此如果您不知道要检索什么,它会变得混乱。动态类型转换在这些情况下很有用。