Saya seorang pemula MongoDB jadi mohon maafkan saya jika pertanyaan ini memiliki jawaban yang jelas...
Konteks:
Saya telah mengikuti contoh di dokumen MongoDB untuk menerapkan agregasi hierarki menggunakan pengurangan peta. Contoh ini menggunakan bidang "gabungan" _id
sebagai kunci pengurangan peta yang menghasilkan dokumen agregat seperti ini...
{
_id: { u: "rick", d: ISODate("2010-10-10T14:00:00Z") },
value: {
ts: ISODate('2010-10-10T15:01:00Z'),
total: 254,
count: 10,
mean: 25.4 }
}
Ini semua baik dan bagus. Kasus penggunaan khusus saya mengharuskan nilai untuk beberapa kunci serupa dikeluarkan setiap map
langkah. Misalnya...
{
_id: { u: "rick", d: ISODate("2010-10-10T14:00:00Z"), hobby: "wizardry" },
value: {
ts: ISODate('2010-10-10T15:01:00Z'),
total: 254,
count: 10,
mean: 25.4 }
}
{
_id: { u: "rick", d: ISODate("2010-10-10T14:00:00Z"), gender: "male" },
value: {
ts: ISODate('2010-10-10T15:01:00Z'),
total: 254,
count: 10,
mean: 25.4 }
}
(Nilainya sama, namun kunci _id
sedikit berbeda.)
Ini juga bagus dan bagus.
Pertanyaan:
Sekarang saya ingin menggabungkan koleksi hierarki (tampilan) saya, yang berisi dokumen yang memiliki beberapa bidang gabungan _id
yang berbeda, tetapi hanya pada dokumen dengan bidang $match
ing _id
. Misalnya, saya ingin menggabungkan hanya dokumen yang memiliki tipe {u: String, d: Date, hobby: String}
_id
atau hanya dokumen dengan tipe _id
{u: String, d: Date}
.
Saya sadar bahwa saya dapat menggunakan operator $exists
untuk membatasi bidang _id
mana yang boleh dan tidak boleh diizinkan, tetapi saya tidak ingin membuat agregasi terpisah untuk setiap _id
(berpotensi banyak).
Apakah ada cara sederhana untuk membatasi $match
ing dokumen secara terprogram ke dokumen yang berisi (atau tidak berisi) bidang tertentu secara agregat?