Mongoose memiliki "skema" untuk melakukan hal ajaib yang disebut "autocasting" untuk Anda. Kasus umum yang dipikirkan oleh perancang di sini adalah bahwa semua masukan dari interaksi "web" seperti GET
dan POST
pada dasarnya terkandung dalam "string".
Apakah ada beberapa pembantu yang membuat parameter menjadi objek dengan kunci dan nilai, semua "nilai" itu masih "string", atau mungkin dibuat langsung numerik oleh "pembantu" yang sama jika perlu. Ini adalah desain kerangka web yang umum.
Jadi ketika Anda mengeluarkan .find()
, fungsi ini sama sekali tidak bisa mengubah konten yang dikembalikan selain dengan menghilangkan bidang/properti, jadi "skema" diterapkan.
.aggregate()
metode sepenuhnya berbeda. Seluruh keberadaannya adalah untuk memodifikasi konten yang terkandung dalam dokumen dan koleksi. Konsekuensinya adalah "tidak mungkin" skema diterapkan.
Oleh karena itu, "autocasting" hadir dalam metode seperti .find()
tidak terjadi , dan Anda diminta untuk memasukkan elemen ( seperti "string" "tanggal" Anda sedang dikirim sebagai ) ke jenis yang benar sendiri:
Reservation.aggregate([
{ "$match": { "createdAt": { "$lte": new Date(req.endDate) } } }
])
Meskipun yang Anda lakukan hanyalah $match
dan bahwa Anda belum "memodifikasi" skema dengan cara apa pun, luwak tidak "menganggap" ini dan tidak mencoba untuk mentransmisikan ke bidang yang cocok dalam skema.
Logikanya di sini adalah bahwa $match
stage atau apa pun yang serupa yang dapat diikat ke "tipe", dapat terjadi di mana saja di dalam pipa. Dengan demikian tidak ada jaminan bahwa dokumen yang sedang ditindaklanjuti oleh tahap pipeline memiliki kemiripan dengan skema pengumpulan asli.
Bisa dibilang itu "bisa" mungkin mempertimbangkan fakta bahwa ini adalah tahap pipa pertama di mana tidak ada yang mungkin berubah dan melakukan pemeriksaan serupa. Tapi itu bukan cara kerja basis kode saat ini.
Jadi singkatnya, saat menggunakan pipa agregasi, semua objek yang perlu secara khusus dilemparkan ke suatu tipe ( Date, ObjectId, dll) harus "secara manual" dilemparkan ke dalam kode Anda, daripada mengasumsikan luwak akan melakukannya untuk Anda seperti dalam metode lain.