Der $redact
Die Phase beginnt beim Stammdokument und seinen Feldern und nur dann, wenn dieses Dokument die Bedingung für $$DESCEND
erfüllt , prüft sie die in diesem Dokument enthaltenen Unterdokumente. Das heißt, das erste, was $redact mit Ihrem Dokument macht, ist Folgendes zu untersuchen:
{
"_id" : ObjectId("50b59cd75bed76f46522c34e"),
"student_id" : 0,
"class_id" : 2,
"scores" : [] // Some array. I will look at this later.
}
Es findet nicht einmal einen type
Feld hier, also $eq: [ "$type" , "exam" ]
ist falsch. Was haben Sie $redact gesagt, was zu tun ist, wenn die Bedingung falsch ist? else: "$$PRUNE"
, sodass das gesamte Dokument bereinigt wird, bevor die Unterdokumente untersucht werden.
Testen Sie als Problemumgehung, ob $type
entweder "exam"
ist oder existiert nicht. Sie haben nicht ausdrücklich nach einer funktionierenden Lösung gefragt, also überlasse ich es Ihnen als Übung, herauszufinden, wie das geht.