$redact
stadiet börjar vid rotdokumentet och dess fält, och endast när det dokumentet uppfyller villkoret att $$DESCEND
, granskar den underdokumenten som ingår i det dokumentet. Det betyder att det första $redact gör med ditt dokument är att undersöka detta:
{
"_id" : ObjectId("50b59cd75bed76f46522c34e"),
"student_id" : 0,
"class_id" : 2,
"scores" : [] // Some array. I will look at this later.
}
Den hittar inte ens en type
fältet här, så $eq: [ "$type" , "exam" ]
är falskt. Vad sa du till $redact att göra när villkoret är falskt? else: "$$PRUNE"
, så hela dokumentet beskärs innan underdokumenten granskas.
Som en lösning, testa om $type
är antingen "exam"
eller inte finns. Du bad inte uttryckligen om en fungerande lösning, så jag lämnar det som en övning för dig att ta reda på hur du gör detta.