Notasi titik berfungsi dengan baik bila digunakan dalam find filter kueri metode. Misalnya,
Document document = collection.find(Filters.eq("one.two", "three")).first();
System.out.println(document); // prints the returned document
atau mongo setara shell:
db.collection.find( { "one.two": "three" } )
Dokumen
get() class kelas metode mengambil Object (kunci String) sebagai parameter dan mengembalikan Object .
Perhatikan kodenya:
Document doc = coll.find(eq("data-id", "1234")).first();
System.out.println(doc);
Keluaran Document{{_id=1.0, data-id=1234, one=Document{{two=three}}}} menunjukkan ada tiga kunci:_id , data-id dan one . Perhatikan ada tidak kunci bernama one.two . Kunci two adalah dalam sub-dokumen dokumen dengan kunci one .
Jadi, dari kode Anda:
document.get("one.two"); // This is null ((Document)
document.get("one")).get("two"); // Not null
Pernyataan pertama mengembalikan null , dan yang berikutnya mengembalikan three (nilai String). Keduanya benar hasil dan itu adalah perilaku Document kelas API.
Anda harus menggunakan metode getEmbedded untuk mengakses bidang tersemat one.two . Jadi, ganti document.get("one.two") dengan
document.getEmbedded(Arrays.asList("one", "two"), String.class)
Hasilnya adalah "tiga", seperti yang diharapkan.