O
$redact estágio começa no documento raiz e seus campos, e somente quando esse documento cumpre a condição de $$DESCEND , examina os subdocumentos incluídos nesse documento. Isso significa que a primeira coisa que $redact faz com seu documento é examinar isso:{
"_id" : ObjectId("50b59cd75bed76f46522c34e"),
"student_id" : 0,
"class_id" : 2,
"scores" : [] // Some array. I will look at this later.
}
Ele nem encontra um
type campo aqui, então $eq: [ "$type" , "exam" ] é falso. O que você disse para $redact fazer quando a condição for falsa? else: "$$PRUNE" , portanto, todo o documento é removido antes que os subdocumentos sejam examinados. Como solução alternativa, teste se
$type é "exam" ou não existe. Você não pediu explicitamente uma solução funcional, então vou deixar como exercício para você descobrir como fazer isso.