2012-08-28 84 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"));