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-id và one . 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.