Dengan MongoDB 3.6 dan yang lebih baru, Anda dapat menggunakan $expr operator di find() . Anda pertanyaan. Ini memungkinkan Anda membuat ekspresi kueri yang membandingkan bidang dari dokumen yang sama dalam $match panggung.
db.customer.find({ "$expr": { "$eq": [{ "$month": "$bday" }, 9] } })
Untuk versi MongoDB lainnya, pertimbangkan untuk menjalankan pipa agregasi yang menggunakan $redact operator karena memungkinkan Anda untuk menggabungkan dengan satu saluran, sebuah fungsi dengan $project untuk membuat bidang yang mewakili bulan bidang tanggal dan $match untuk menyaring dokumen yang sesuai dengan kondisi bulan yang diberikan September.
Di atas, $redact menggunakan $cond operator tenary sebagai sarana untuk memberikan ekspresi kondisional yang akan membuat variabel sistem yang melakukan redaksi. Ekspresi logis dalam $cond akan memeriksa kesetaraan bidang operator tanggal dengan nilai yang diberikan, jika cocok maka $redact akan mengembalikan dokumen menggunakan $$KEEP variabel sistem dan membuang sebaliknya menggunakan $$PRUNE .
Menjalankan pipeline berikut akan memberi Anda hasil yang diinginkan:
db.customer.aggregate([
{ "$match": { "bday": { "$exists": true } } },
{
"$redact": {
"$cond": [
{ "$eq": [{ "$month": "$bday" }, 9] },
"$$KEEP",
"$$PRUNE"
]
}
}
])
Ini mirip dengan $project +$match kombo tetapi Anda harus memilih semua bidang lainnya yang masuk ke dalam pipeline:
db.customer.aggregate([
{ "$match": { "bday": { "$exists": true } } },
{
"$project": {
"month": { "$month": "$bday" },
"bday": 1,
"field1": 1,
"field2": 1,
.....
}
},
{ "$match": { "month": 9 } }
])
Dengan alternatif lain, meskipun kueri lambat, menggunakan find() metode dengan $where sebagai:
db.customer.find({ "$where": "this.bday.getMonth() === 8" })