El $redact
la etapa comienza en el documento raíz y sus campos, y solo cuando ese documento cumple la condición para $$DESCEND
, examina los subdocumentos incluidos en dicho documento. Eso significa que lo primero que hace $redact con su documento es examinar esto:
{
"_id" : ObjectId("50b59cd75bed76f46522c34e"),
"student_id" : 0,
"class_id" : 2,
"scores" : [] // Some array. I will look at this later.
}
Ni siquiera encuentra un type
campo aquí, entonces $eq: [ "$type" , "exam" ]
Es falso. ¿Qué le dijiste a $redact que hiciera cuando la condición es falsa? else: "$$PRUNE"
, por lo que todo el documento se elimina antes de que se examinen los subdocumentos.
Como solución, prueba si $type
es "exam"
o no existe. No pediste explícitamente una solución que funcionara, así que te dejaré como ejercicio que averigües cómo hacerlo.