2012-08-28 133 views
5

我想从一个子文档中获得一个键的值,我似乎无法弄清楚如何使用BasicDBObject.get()函数,因为该键被嵌入了两个深层次。这里是文档的结构Java MongoDB获取子文档的值

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

基本上一个文件有多个报告,我需要检索给定文件中所有报告的名称。我可以做BasicDBObject.get("name"),我可以得到“file_1”的值,但是我该怎么做这样的BasicDBObject.get("report.name")?我尝试过,但没有奏效。

+0

当你说它没有工作实际发生了什么? – Mark

+0

当它没有工作时,它什么都没有返回。 – Dhruv

回答

10

您应该首先获取“报告”对象,然后访问其内容。您可以在下面看到示例代码。

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); 
} 
+0

会试试这个。非常感谢。 – Dhruv

+0

如何使用Jongo API来完成? –

3

我发现了第二种方法做到这一点,在另一篇文章(没有保存链接,否则我会包括这一点)。

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

这里查询=(BasicDBObject)cursor.next()

+1

这和我写的是一样的。而不是两行,他们写单行查询。 –

1

你可以试试这个,这个工作对我来说

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

+0

对于查询子文档中的字段,使用此点符号对我来说非常合适。谢谢。 – splungebob

1

您还可以使用查询,如情况MongoTemplate等等...

Query query = new Query(Criteria.where("report.name").is("some value"));