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.