MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Các tài liệu lồng nhau trong MongoDB Java không thể truy cập được bằng cách sử dụng dấu chấm trong tên khóa

Ký hiệu dấu chấm hoạt động tốt khi được sử dụng trong find bộ lọc truy vấn của phương thức. Ví dụ:

Document document = collection.find(Filters.eq("one.two", "three")).first();
System.out.println(document);    // prints the returned document

hoặc mongo của nó tương đương shell:

db.collection.find( { "one.two": "three" } )


Tài liệu của lớp get() phương thức lấy một Object (một khóa Chuỗi) dưới dạng một tham số và trả về một Object .

Hãy xem xét mã:

Document doc = coll.find(eq("data-id", "1234")).first();
System.out.println(doc);

Kết quả đầu ra Document{{_id=1.0, data-id=1234, one=Document{{two=three}}}} cho thấy có ba khóa:_id , data-idone . Lưu ý rằng có không khóa có tên là one.two . Khóa two nằm trong trong tiểu dcument của tài liệu với khóa one .

Vì vậy, từ mã của bạn:

document.get("one.two");    // This is null ((Document)
document.get("one")).get("two"); // Not null

Câu lệnh đầu tiên trả về null và cái tiếp theo trả về three (giá trị Chuỗi). Cả hai đều đúng kết quả và đó là hành vi của Document API lớp.

Bạn nên sử dụng phương thức getEmbedded để truy cập trường nhúng one.two . Vì vậy, hãy thay thế document.get("one.two") với

document.getEmbedded(Arrays.asList("one", "two"), String.class)

Kết quả là "ba", như mong đợi.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Truy vấn tổng hợp / nhóm / tổng MongoDB được dịch sang truy vấn pymongo

  2. Lược đồ chưa được đăng ký cho mô hình. Mongodb> Mongoose

  3. Làm cách nào để thay đổi kiểu dữ liệu của trường lồng nhau trong tài liệu Mongo?

  4. MongoDB nhận các trạng thái thực thi cho truy vấn tổng hợp

  5. Sự khác biệt giữa MongoDB và Mongoose