Le $redact
l'étape commence au document racine et à ses champs, et uniquement lorsque ce document remplit la condition de $$DESCEND
, il examine les sous-documents inclus dans ce document. Cela signifie que la première chose que $redact fait avec votre document est d'examiner ceci :
{
"_id" : ObjectId("50b59cd75bed76f46522c34e"),
"student_id" : 0,
"class_id" : 2,
"scores" : [] // Some array. I will look at this later.
}
Il ne trouve même pas de type
champ ici, donc $eq: [ "$type" , "exam" ]
c'est faux. Qu'avez-vous dit à $redact de faire lorsque la condition est fausse ? else: "$$PRUNE"
, de sorte que l'ensemble du document est élagué avant que les sous-documents ne soient examinés.
Pour contourner ce problème, testez si $type
est soit "exam"
ou n'existe pas. Vous n'avez pas explicitement demandé une solution de travail, donc je vais vous laisser un exercice pour comprendre comment faire cela.