$redact
етапът започва от основния документ и неговите полета и само когато този документ изпълнява условието за $$DESCEND
, той разглежда поддокументите, включени в този документ. Това означава, че първото нещо, което $redact прави с вашия документ, е да прегледа това:
{
"_id" : ObjectId("50b59cd75bed76f46522c34e"),
"student_id" : 0,
"class_id" : 2,
"scores" : [] // Some array. I will look at this later.
}
Дори не намира type
поле тук, така че $eq: [ "$type" , "exam" ]
е невярно. Какво казахте на $redact да прави, когато условието е невярно? else: "$$PRUNE"
, така че целият документ се съкращава, преди да бъдат прегледани поддокументите.
Като заобиколно решение, тествайте дали $type
е или "exam"
или не съществува. Не поискахте изрично работещо решение, така че ще ви оставя като упражнение да разберете как да направите това.