2012-08-28 36 views
5

Tôi đang cố gắng lấy giá trị của khóa từ một tài liệu phụ và tôi không thể tìm ra cách sử dụng hàm BasicDBObject.get() vì khóa được nhúng hai mức độ sâu. Đây là cấu trúc của tài liệuJava MongoDB nhận giá trị cho tài liệu phụ

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

Về cơ bản một tệp có nhiều báo cáo và tôi cần truy xuất tên của tất cả các báo cáo trong một tệp nhất định. Tôi có thể làm BasicDBObject.get("name") và tôi có thể nhận được giá trị "file_1", nhưng làm cách nào để làm điều gì đó như thế này BasicDBObject.get("report.name")? Tôi đã thử nhưng nó không hoạt động.

+0

Khi bạn nói nó không hoạt động những gì thực sự đã xảy ra? – Mark

+0

Khi nó không hoạt động, nó không trả lại gì cả. – Dhruv

Trả lời

10

Trước tiên bạn sẽ nhận được đối tượng "báo cáo" và sau đó truy cập nội dung của nó. Bạn có thể xem mã mẫu ở bên dưới.

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

Sẽ dùng thử. Cảm ơn rất nhiều. – Dhruv

+0

Làm thế nào nó có thể được thực hiện bằng cách sử dụng Jongo API? –

3

Tôi tìm thấy cách thứ hai để thực hiện nó, trên một bài đăng khác (không lưu liên kết nếu không tôi đã bao gồm).

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

nơi query = (BasicDBObject) cursor.next()

+1

Điều này giống như tôi đã viết.Trong hai dòng họ đã viết truy vấn trong một dòng. –

1

Bạn có thể thử điều này, điều này làm việc cho tôi

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

+0

Để truy vấn các trường trong các tài liệu phụ, việc sử dụng ký hiệu dấu chấm này làm việc hoàn hảo cho tôi. Cảm ơn. – splungebob

1

Bạn cũng có thể sử dụng các truy vấn, như trong trường hợp của MongoTemplate và như vậy ...

Query query = new Query(Criteria.where("report.name").is("some value")); 
Các vấn đề liên quan