我一直试图得到这个问题,但我无法对此问题表示不满。
对象看起来像这样:
{
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)
上面提到的代码旨在找到子对象中存在的唯一字段。但问题或多或少是一样的。
答案 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,因此如果您不知道要检索什么,它会变得混乱。动态类型转换在这些情况下很有用。