Skip to content

Queries MongoDB

Gabriel Tibúrcio edited this page Sep 26, 2017 · 8 revisions

Aqui serão documentadas queries interessantes do MongoDB para uso no sistema e referências futuras.


Recuperando a quantidade de submissões agrupada em intervalos de porcentagem de acerto

db.getCollection('submissoes').aggregate([
    {
        $group: {
            _id: "$porcentagemAcerto",
            quantidade: { $sum: 1 }
        }
    }
])

Recuperando submissões por questão por aluno com a maior porcentagem de acerto das submissões

db.getCollection('submissoes').aggregate([
	{ $match: { user: ObjectId("5991e8a50be9d42f2f68b988") } },
	{ $group: {
		_id: '$questao',
		submissoes: { $push: '$$CURRENT' },
		user: { $first: '$user' },
		acerto: { $max: '$$CURRENT.porcentagemAcerto' }
	}}
]);

Recuperando submissões por prova por aluno informando o id da prova

db.getCollection('submissoesProva').aggregate([
	{ $match: { prova: prova._id } },
	{ $lookup: {
		from: 'users',
		localField: 'user',
		foreignField: '_id',
		as: 'user'
	}},
	{ $unwind: '$user' },
	{ $group: {
		_id: '$user._id',
		submissoes: { $push: '$$CURRENT' },
		user: { $push: '$user' }
	} },
	{ $unwind: '$user' }
]);

Identificando questões de uma determinada lista pelo enunciado começando com [LX onde X é o número da lista

db.getCollection('questoes').find({
    enunciado: { $regex: /^\[L2/m }
})

Remover \r\n de todos os enunciados de questões de uma determinada lista

db.getCollection('questoes').find({
    enunciado: { $regex: /^\[L2/m }
}).forEach(function(doc) {
    doc.enunciado = doc.enunciado.replace('\r\n', ' ')
    db.questoes.update({ _id: doc._id }, { $set: { enunciado: doc.enunciado }})
})

Submissões de uma certa questão com aluno e questão incluídos

db.getCollection('submissoes').aggregate([
    {
        $lookup: {
            from: 'questoes',
            localField: 'questao', 
            foreignField: '_id',
            as: 'questao'
        }
    },
    { $unwind: '$questao' },
    {
        $match: {
            'questao.titulo': 'Um ponto em um retângulo'
        }
    },
    {
        $lookup: {
            from: 'users',
            localField: 'user',
            foreignField: '_id',
            as: 'user'
        }
    },
    { $unwind: '$user' }
])