Anda perlu memahami urutan eksekusi kode Anda:
-
luwak mendapatkan semua buku dari database di mana
{_creator:{$ne:null}}
. Mongo hanya melihat referensi di dalam koleksi buku untuk menentukan dokumen mana yang akan dikembalikan. Buku Anda masih memiliki referensi ke seorang penulis, dan mongo tidak akan melihat bahwa tidak ada Penulis yang cocok dalam koleksi Penulis, sehingga buku Anda dimuat. -
luwak mengisi semua hasil yang dikembalikan:sehingga memuat penulis dari koleksi Penulis dan mengganti referensi dengan objek nyata. Untuk buku Anda tidak menemukan penulis yang cocok, sehingga menempatkan
null
di sana.
Itulah mengapa Anda berakhir dengan daftar hasil Anda.
Mongo tidak mendukung penggabungan - oleh karena itu Anda tidak dapat melakukan kueri yang menyertakan data dari lebih dari satu koleksi. Mengisi hanyalah cara untuk mengganti referensi di daftar hasil Anda dengan data nyata, Anda tidak akan pernah dapat menggunakan data yang diisi sebagai bagian dari klausa where Anda.
Untuk mengatasi masalah Anda, Anda dapat:
- filter daftar hasil akhir Anda dalam kode JS, mis. dengan _.filter dari perpustakaan lodash.
- perbarui semua buku Anda dan hapus referensi setiap kali Anda menghapus seorang penulis. Anda dapat menggunakan pengait pada Skema Penulis untuk melakukan ini.
AuthorSchema.post('remove', function(doc) {// update your books here});