JavaScript (Código no Servidor)
Última atualização: 2026-10-09
JavaScript (Código no Servidor)
O tipo JavaScript armazena código JS em um documento, executado no servidor por meio de `$where` (executado por documento). `$where` não pode usar índices e é lento — adequado apenas para coleções pequenas ou lógica que nenhum operador de consulta consegue expressar. Desde o MongoDB 8.0, o JavaScript no servidor é desabilitado por padrão e precisa de uma flag explícita de inicialização; prefira `$expr` ou o operador de agregação `$function` em código novo.
| Categoria | Tipos BSON |
|---|---|
| Versão do MongoDB | 1.0+ |
| Idioma do Exemplo | mongosh (Shell) |
📝 Sintaxe
{ $where: "this.price * this.qty > 100" }
{ $expr: { $gt: [{ $multiply: ["$price", "$qty"] }, 100] } }
Retorno:$where retorna documentos que passam no predicado; valores JS armazenados são strings de código
▶ Exemplo
Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):
// JavaScript: $where no servidor
use shop
db.orders.find({ $where: 'this.price * this.qty > 1000' })
Saída:
// Pedidos onde price * qty > 1000 (varredura de coleção)
📌 Notas
- $where executa JS por documento, não pode usar índices e é lento
- O JS no servidor está desligado por padrão desde a 8.0 (habilite via --enableJavaScriptExecution)
- Prefira $expr/$function como equivalentes mais seguros e rápidos
🏷️ Tags Relacionados
💡 Casos Relacionados
Mais casos práticos em breve.
📚 Tutoriais Relacionados
❓ Perguntas Frequentes
QPor que $where é lento?
AEle invoca um interpretador JS por documento, não pode usar índices e força uma varredura completa.
QO $where ainda funciona no MongoDB 8.0?
ADesabilitado por padrão; inicie o servidor com --enableJavaScriptExecution para religá-lo.
QComo expresso comparações complexas entre campos?
AUse $expr com operadores de agregação como $multiply — otimizável e parcialmente amigável a índices.