Pular para o conteúdo principal

Questão de Banco de Dados — Documentos (MongoDB e CouchDB) — FGV 2025

Banco de DadosDocumentos (MongoDB e CouchDB)
Código
fg169068
Banca
FGV
Órgão
MPU
Ano
2025
Cargo
Ana
Observe o resultado da execução dos seguintes comandos do MongoDB Shell.   > use MPU2025 > switched to db MPU2025 > db.getCollectionNames(); < [ 'Processos' ] > db["Processos"].find(); <{   _id: '676850ada9ec96543d3001c2',   processo_numero: '0001',   situacao: 'Ativo',   partes: {     autor: ['Maria'],     reu: [       'Pedro',       'Ivo"'     ]   }, } {   _id: '67685117a9ec96543d3001c5',   processo_numero: '0002',   partes: {     autor: ['Maria'],     reu: ['Joana']   }, }   Para listar apenas os processos que possuem dois réus, deve-se executar o comando:
  1. A'Processos'.filter(toArray({reu=2}));
  2. Bdb.collection.count({"partes.reu",2});
  3. CMPU2025.Processos.dataSize("partes.reu"$2);
  4. Ddb["Processos"].find({"partes.reu":{$size:2}});
  5. Edb.Processos.countDocuments({"partes.reu":"2"});
Revelar gabarito e comentário

GabaritoD — db["Processos"].find({"partes.reu":{$size:2}});

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

MongoDB: consultas com operador $size

Gabarito: letra D. Para listar apenas os processos que possuem dois réus, o comando correto é db["Processos"].find({"partes.reu":{$size:2}}), pois o operador $size do MongoDB seleciona documentos cujo campo de array tenha exatamente o número de elementos especificado — aqui, o campo partes.reu é um array e queremos exatamente 2 elementos. As demais alternativas usam sintaxe inexistente ou operadores inadequados.

O MongoDB é um banco de dados NoSQL orientado a documentos, no qual os dados são armazenados em documentos BSON (Binary JSON) dentro de coleções. Cada documento é uma estrutura de pares campo-valor, e os campos podem ser de diversos tipos, incluindo arrays e documentos aninhados. No exemplo do enunciado, o campo partes.reu é um array de strings (nomes dos réus), e a consulta deve filtrar documentos em que esse array tenha exatamente dois elementos.

Para consultar arrays no MongoDB, existem operadores específicos. O operador $size é usado para selecionar documentos em que um campo de array tenha um tamanho exato. A sintaxe é: { <campo>: { $size: <número> } }. No caso, {"partes.reu": {$size: 2}} retorna apenas os documentos em que o array partes.reu tem exatamente 2 elementos. No exemplo, o processo 0001 tem reu: ['Pedro', 'Ivo'] (2 elementos) e o processo 0002 tem reu: ['Joana'] (1 elemento), então apenas o primeiro seria retornado.

É importante distinguir $size de outros operadores de array, como $elemMatch (que seleciona documentos que possuem pelo menos um elemento do array que atenda a uma condição) e $all (que seleciona documentos cujo array contém todos os elementos especificados). O $size é específico para o tamanho exato do array, e não aceita intervalos (para isso, seria necessário usar $expr com $size e operadores de comparação).

A pegadinha da banca está em misturar sintaxes de outras linguagens ou comandos que não existem no MongoDB, como filter(toArray(...)), count({"partes.reu",2}), dataSize(...), ou usar countDocuments com uma string em vez de um operador de array. O candidato que conhece a sintaxe correta do $size resolve a questão rapidamente.

1$size
tamanho exato do array
ex.: {"partes.reu": {$size: 2}}
2$all
contém todos os elementos
3$elemMatch
pelo menos um elemento atende
4Sintaxe correta
db.colecao.find({campo: {$operador: valor}})
Operadores de array (MongoDB)
LEVELsoulevel.com.br
Operadores de array (MongoDB): size (tamanho exato do array, ex.: "partes.reu":size: 2}}); $all (contém todos os elementos); elemMatch (pelo menos um elemento atende); Sintaxe correta (db.colecao.find(campo:operador: valor}}))

Alternativa A — ❌ Incorreta

'Processos'.filter(toArray({reu=2})); — Esta sintaxe não existe no MongoDB. filter e toArray não são métodos do shell do MongoDB para consultas em coleções. Além disso, a notação {reu=2} não é um documento JSON válido (deveria ser {reu: 2}), e mesmo que fosse, não há um operador que compare o tamanho de um array dessa forma. O correto seria usar db.Processos.find({...}) com o operador $size.

Alternativa B — ❌ Incorreta

db.collection.count({"partes.reu",2}); — A sintaxe está errada: db.collection não é uma referência válida (deveria ser db.Processos ou db["Processos"]), e o método count não aceita uma vírgula entre o campo e o valor. Além disso, count conta documentos que correspondem a um filtro, mas o filtro {"partes.reu",2} não é um documento JSON válido (faltam os dois-pontos). Mesmo que fosse {"partes.reu": 2}, isso não funcionaria porque partes.reu é um array, e a comparação direta com um número não seleciona por tamanho. O correto seria usar $size.

Alternativa C — ❌ Incorreta

MPU2025.Processos.dataSize("partes.reu"$2); — Esta sintaxe é totalmente inválida. MPU2025.Processos não é uma forma de acessar uma coleção no MongoDB (o correto é db.Processos ou db["Processos"]). O método dataSize não existe no shell do MongoDB para consultas; ele é usado em db.collection.dataSize() para obter o tamanho dos dados, mas não para filtrar. Além disso, "partes.reu"$2 não é uma expressão válida.

Alternativa D — ✅ Correta ⟵ GABARITO

db["Processos"].find({"partes.reu":{$size:2}}); — Esta é a sintaxe correta. O método find recebe um documento de filtro, e o operador $size seleciona documentos em que o campo partes.reu (um array) tenha exatamente 2 elementos. No exemplo, o processo 0001 tem reu: ['Pedro', 'Ivo'] (2 elementos), então seria retornado; o processo 0002 tem reu: ['Joana'] (1 elemento), então não seria. A notação db["Processos"] é equivalente a db.Processos e é válida no shell do MongoDB.

Alternativa E — ❌ Incorreta

db.Processos.countDocuments({"partes.reu":"2"}); — O método countDocuments conta documentos que correspondem a um filtro, mas o filtro {"partes.reu":"2"} compara o campo partes.reu com a string "2", não com o tamanho do array. Como partes.reu é um array, essa comparação não seleciona documentos por tamanho; ela tentaria comparar o array com a string, o que não corresponde a nenhum documento. Para contar documentos com array de tamanho 2, seria necessário usar $size: db.Processos.countDocuments({"partes.reu": {$size: 2}}).

NÃO CAIA NESSA!

A banca explora a confusão entre sintaxes de diferentes linguagens e comandos que não existem no MongoDB. O candidato pode ser tentado a usar count ou countDocuments para contar, mas a questão pede para listar os processos, não contar. Além disso, a comparação direta {"partes.reu": 2} não funciona para arrays; é preciso usar o operador $size. Lembre-se: para filtrar por tamanho de array, o operador é $size, e ele deve ser usado dentro de um documento de filtro no find (ou countDocuments).

PEGA ESSA DICA!

Para questões de MongoDB, decore os operadores de array mais cobrados: $size (tamanho exato), $all (contém todos os elementos), $elemMatch (pelo menos um elemento atende à condição). E lembre-se da sintaxe: db.colecao.find({campo: {$operador: valor}}). Se a alternativa usar filter, toArray, dataSize ou sintaxe com vírgula, está errada.

Gabarito: letra D

Link permanente: /questoes/fg169068