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

Luwak:ada apa dengan _doc?

Perbarui

Mungkin saya salah memahami pertanyaan awal Anda, tetapi sekarang sepertinya sifat pertanyaan Anda berubah, jadi informasi di bawah ini tidak relevan, tetapi saya biarkan saja. :)

Saya menguji kode Anda dan berfungsi dengan baik untuk saya. Mongoose tidak mengeksekusi kode khusus apa pun saat Anda menyetel properti yang bukan bagian dari skema (atau beberapa properti khusus lainnya). JavaScript saat ini tidak mendukung kode panggilan untuk properti yang belum ada (sehingga Mongoose tidak dapat menghalangi kumpulan goo properti misalnya).

Jadi, ketika Anda mengatur properti:

foo.goo = { c: 1 };

Mongoose tidak terlibat. Jika console.log Anda adalah sesuatu selain kode yang Anda tampilkan, saya dapat melihat bahwa itu mungkin salah melaporkan.

Selain itu, saat Anda send hasilnya kembali sebagai JSON, JSON.stringify sedang dipanggil, yang memanggil toString pada Model Mongoose Anda. Ketika itu terjadi, Mongoose hanya menggunakan properti yang ditentukan pada skema. Jadi, tidak ada properti tambahan yang dikirim kembali secara default. Anda telah mengubah sifat data array meskipun untuk langsung menunjuk pada data Mongoose, sehingga menghindari masalah itu.

Detail tentang perilaku normal

Saat Anda menyetel properti goo menggunakan Mongoose, beberapa hal terjadi. Luwak membuat pengambil/penyetel properti melalui Object.defineProperty (beberapa dokumen ). Jadi, ketika Anda mengatur goo properti, yang telah Anda definisikan sebagai [String] , beberapa hal terjadi:

  1. Kode luwak dipanggil sebelum nilai disetel ke instance objek (tidak seperti objek JavaScript sederhana)
  2. Mongoose membuat larik (opsional) untuk menyimpan data (MongooseArray ) yang akan berisi data array. Dalam contoh yang Anda berikan, karena Anda tidak melewatkan array, array akan dibuat.
  3. Luwak akan mencoba memasukkan data Anda ke jenis yang tepat
  4. Ini akan memanggil toString pada data yang dikirimkan sebagai bagian dari pemeran.

Jadi, hasilnya adalah dokumen sekarang berisi array dengan toString versi objek yang Anda lewati.

Jika Anda memeriksa isi goo properti, Anda akan melihat bahwa itu sekarang array dengan elemen tunggal, yang merupakan string yang berisi [object Object] . Jika Anda memilih tipe yang lebih mendasar atau cocok dengan tipe penyimpanan properti tujuan, Anda akan melihat bahwa pemeriksaan kesetaraan dasar akan berhasil.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Saya butuh saran tentang NoSQL/MongoDb dan struktur data/model

  2. Bagaimana cara menyimpan informasi geospasial di mongoDB

  3. Bisakah bidang daftar menjadi kunci pecahan di MongoDB?

  4. Membuat spring-data-mongodb multi-tenant

  5. MongoDB .NET tidak menghasilkan _id saat upsert