1001Ferramentas
🍃Geradores

Gerador de MongoDB find()

Constrói uma query find() do MongoDB a partir de filtros (campo: valor), projeção e ordenação. Usa operadores $eq, $gt, $in.


  

MongoDB find em profundidade

db.collection.find(filter, projection) é a operação de leitura primária no MongoDB. O primeiro argumento é um documento de filtro comparado contra cada registro da coleção; o segundo é uma projeção opcional escolhendo quais campos retornam. A chamada devolve um cursor — um fluxo preguiçoso materializado pelo driver com .toArray(), .forEach(), .map() ou .next(). O MongoDB armazena documentos em BSON, um superset binário do JSON com tipos extras como ObjectId, Date, Decimal128 e Binary.

Operadores de filtro

  • Comparação: $eq, $ne, $gt, $gte, $lt, $lte, $in [array], $nin.
  • Elemento: $exists: true/false, $type: 'string'.
  • Avaliação: $regex /padrao/i, $mod: [div, resto], $expr, $jsonSchema.
  • Lógicos: $and, $or, $nor, $not.
  • Array: $all, $elemMatch, $size.
  • Geoespacial: $near, $geoWithin, $geoIntersects (precisam de índice 2dsphere).

Projeção e modificadores de cursor

A projeção é inclusiva ({ name: 1, email: 1 }) ou exclusiva ({ password: 0 }); os dois modos não podem ser misturados, exceto para _id, que é incluído por padrão e precisa de { _id: 0 } para sumir. Modificadores encadeados refinam o resultado: .sort({ createdAt: -1 }), .limit(n), .skip(n), .hint({ campo: 1 }) para forçar um índice e .countDocuments(filter) para contagem precisa (o antigo .count() está depreciado). .explain('executionStats') mostra o plano vencedor, totalDocsExamined e executionTimeMillis — o comando de debug mais útil do MongoDB.

Índices e a regra ESR

Um índice B-tree é criado com db.collection.createIndex({ campo: 1 }). Índices compostos seguem a regra ESR: Equality (igualdade) primeiro, depois Sort (ordenação), depois Range (faixa). Variantes incluem text (full-text), 2dsphere (geoespacial), hashed (sharding), partial (filtrado) e TTL (auto-expiração). Quando uma query não consegue usar índice, dispara um COLLSCAN — varredura completa da coleção — tolerável em dev, catastrófico em produção.

Quando migrar para o pipeline de agregação

Quando você precisa de agrupamento, joins, campos derivados ou transformações em múltiplas etapas, abandone o find e vá para o pipeline de agregação: $match, $project, $group, $sort, $lookup (left join), $unwind (explode arrays), $bucket (histogramas) e $facet (sub-pipelines paralelos). O primeiro estágio $match do pipeline se comporta como filtro de find e recebe a mesma otimização de índice.

Perguntas frequentes

$or usa índice? Sim, mas só se cada braço do $or tiver um índice no seu campo — caso contrário o MongoDB cai em varredura completa. O explain mostra o estágio OR e qual índice cada filho usa.

Por que paginação com .skip(N).limit(20) fica lenta em coleções grandes? Porque o skip ainda percorre todos os documentos anteriores. Prefira paginação por intervalo: guarde o último _id ou createdAt e consulte { _id: { $gt: ultimoId } }; cai direto no índice e roda em tempo constante.

Como o MongoDB difere de um banco SQL? Cada linha vira um documento JSON-like autossuficiente; arrays e objetos aninhados substituem JOINs; o schema é flexível (sem ALTER TABLE); e o sharding horizontal é nativo via shard keys e config servers.

O Mongoose é obrigatório? Não. O Mongoose é um ODM que adiciona schema, hooks e validadores em cima do driver oficial mongodb. O driver puro é mais rápido e leve; o Mongoose ajuda quando se precisa de validação declarativa e formatos consistentes.

Ferramentas Relacionadas