Il $redact
la fase inizia dal documento radice e dai suoi campi, e solo quando quel documento soddisfa la condizione di $$DESCEND
, esamina i sottodocumenti inclusi in tale documento. Ciò significa che la prima cosa che $redact fa con il tuo documento è esaminare questo:
{
"_id" : ObjectId("50b59cd75bed76f46522c34e"),
"student_id" : 0,
"class_id" : 2,
"scores" : [] // Some array. I will look at this later.
}
Non trova nemmeno un type
campo qui, quindi $eq: [ "$type" , "exam" ]
è falso. Cosa hai detto a $redact di fare quando la condizione è falsa? else: "$$PRUNE"
, quindi l'intero documento viene eliminato prima che i documenti secondari vengano esaminati.
Come soluzione alternativa, verifica se $type
è "exam"
o non esiste. Non hai chiesto esplicitamente una soluzione funzionante, quindi lascerò a te il compito di capire come farlo.