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.