$redact
tahap dimulai pada dokumen root dan bidangnya, dan hanya jika dokumen tersebut memenuhi kondisi ke $$DESCEND
, ia memeriksa sub-dokumen yang disertakan dalam dokumen itu. Itu berarti hal pertama yang dilakukan $redact dengan dokumen Anda adalah memeriksa ini:
{
"_id" : ObjectId("50b59cd75bed76f46522c34e"),
"student_id" : 0,
"class_id" : 2,
"scores" : [] // Some array. I will look at this later.
}
Ia bahkan tidak menemukan type
field di sini, jadi $eq: [ "$type" , "exam" ]
adalah palsu. Apa yang Anda suruh $redact lakukan ketika kondisinya salah? else: "$$PRUNE"
, sehingga seluruh dokumen dipangkas sebelum sub-dokumen diperiksa.
Sebagai solusinya, uji apakah $type
adalah "exam"
atau tidak ada. Anda tidak secara eksplisit meminta solusi yang berhasil, jadi saya akan menyerahkannya sebagai latihan bagi Anda untuk mengetahui cara melakukannya.