MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Dokumen bersarang Java MongoDB tidak dapat diakses menggunakan titik di nama kunci

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.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Validasi luwak:diperlukan:salah, validasi:regex, masalah dengan nilai kosong

  2. Meteor Berlangganan tidak memperbarui urutan pengurutan koleksi

  3. Bagaimana cara memperbarui bidang tertentu di luwak?

  4. Bagaimana cara menambahkan kenaikan otomatis ke koleksi yang ada di mongodb/node.js?

  5. Properti luwak kadaluarsa tidak berfungsi dengan baik