MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Caviarder dans mongodb me semble obscur

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.