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.