2
respostas

Dificuldade com a especificação dentro de um find.

Olá, terminei o curso de Mongo da Alura e gostaria de aprender mais sobre as consultas do MongoDb (sim, já busquei na documentação e no Google e não identifiquei).

Eu não sei se é possível o mongo tratar essa condição diretamente na consulta, mas eu gostaria que retornasse todos os alunos com a $avg de inglês >= 5 e $avg de Alemão >= 8

db.getCollection('alunos').aggregate([
    {
        $match: {
            $and: [
                {
                    "cursos.materias": {
                        $elemMatch: {
                            notas : { 
                                $gte : "5" // Cinco é a média para a matéria de Inglês
                            },
                            nome : "Inglês"
                        }
                    }
                },
                {
                    "cursos.materias": {
                        $elemMatch: {
                            notas : { 
                                $gte : "8" // Oito é a média para a matéria de Alemão
                            },
                            nome : "Alemão"
                        }
                    }
                }
            ]
        }
    },
    {
        $project : {
            "nome" : "$nome",
        }
    }
])

// O JSON do aluno é: 

{
    "nome" : "Bruno",
    "cursos" : {
        "nome" : "Idiomas",
        "materias" : [ 
            {
                "nome" : "Inglês",
                "notas" : [2,5,6,9]
            }, 
            {
                "nome" : "Alemão",
                "notas" : [3,1,1,2]
            }
        ]
    }
}

Obrigado.

2 respostas

Aguardando ajuda =)

Eduardo, você já tentou fazer uma query so pra pegar a $avg das notas sem nenhuma outra condição? Não manjo muito de Mongo mas imagino que se você conseguir fazer essa consulta que retorne o aluno é a média, vc com certeza consegue usar isso como condição em uma query.