MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Redigir no mongodb parece obscuro para mim


O $redact estágio começa no documento raiz e seus campos, e somente quando esse documento cumpre a condição de $$DESCEND , examina os subdocumentos incluídos nesse documento. Isso significa que a primeira coisa que $redact faz com seu documento é examinar isso:
{
    "_id" : ObjectId("50b59cd75bed76f46522c34e"),
    "student_id" : 0,
    "class_id" : 2,
    "scores" : [] // Some array. I will look at this later.
}

Ele nem encontra um type campo aqui, então $eq: [ "$type" , "exam" ] é falso. O que você disse para $redact fazer quando a condição for falsa? else: "$$PRUNE" , portanto, todo o documento é removido antes que os subdocumentos sejam examinados.

Como solução alternativa, teste se $type é "exam" ou não existe. Você não pediu explicitamente uma solução funcional, então vou deixar como exercício para você descobrir como fazer isso.