Anda tidak dapat menggunakan operator agregasi tanggal
pada hal lain yang merupakan Date
objek itu sendiri. Pilihan terbaik Anda adalah mengonversi "string" ini menjadi Date
objek sehingga Anda dapat melakukan kueri dengan benar dalam operasi ini dan yang akan datang.
Yang mengatakan, jika "string" Anda selalu memiliki struktur yang sama maka ada cara untuk melakukan ini dengan kerangka agregasi
peralatan. Ini membutuhkan banyak pemikiran manipulasi yang tidak menjadikan ini pendekatan yang "optimal" untuk menangani masalah. Tetapi dengan struktur set "digit ganda" dan pembatas yang konsisten, ini dimungkinkan dengan $substr
operator:
db.collection.aggregate([
{ "$group": {
"_id": {
"year": { "$substr": [ "$dateStr", 7, 4 ] },
"month": { "$substr": [ "$dateStr", 4, 2 ] }
},
"count": { "$sum": 1 }
}}
])
Jadi casting JavaScript tidak berfungsi di dalam kerangka agregasi. Anda selalu dapat "memberi masukan" ke saluran pipa berdasarkan evaluasi "kode klien", tetapi proses agregasi itu sendiri tidak mengevaluasi kode apa pun. Sama seperti mesin kueri dasar, ini semua didasarkan pada implementasi "struktur data" yang menggunakan instruksi "operator asli" untuk melakukan pekerjaan.
Anda tidak dapat mengonversi string menjadi tanggal dalam alur agregasi. Anda harus bekerja dengan BSON Date
asli
objek, tetapi Anda dapat melakukannya dengan string jika ada format konsisten yang dapat Anda sajikan dalam "urutan leksikal".
Saya masih menyarankan agar Anda mengonversinya ke BSON Dates
SECEPAT MUNGKIN. Dan berhati-hatilah bahwa nilai "ISODate" atau UTC dibuat dengan bentuk string yang berbeda. yaitu:
new Date("2020-01-07")
Berada dalam format "yyyy-mm-dd". Setidaknya untuk permintaan JavaScript.