$where (Expressão JavaScript)

Última atualização: 2026-10-09

$where (Expressão JavaScript)

$where avalia uma expressão JavaScript como o predicado de consulta. `{ $where: 'this.credits == this.debits' }`. Ele é executado no servidor, é lento, não pode usar índices, e o MongoDB recomenda $expr em vez dele. Use-o apenas quando $expr não puder expressar a lógica (ex.: funções JS personalizadas) e proteja-se contra injeção.

CategoriaElemento e Avaliação
Versão do MongoDB1.0+
Idioma do Exemplomongosh (Shell)

📝 Sintaxe

{ $where: <expressão JavaScript> }

⚙️ Parâmetros

expressão JSUma expressão JavaScript que retorna um booleano; this refere-se ao documento atual.

Retorno:Cursor dos documentos correspondentes

▶ Exemplo

Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):

// $where: registros onde credits é igual a debits (JS)
db.accounts.find({ $where: 'this.credits == this.debits' })

// Recomendado: $expr é mais rápido
db.accounts.find({ $expr: { $eq: ['$credits', '$debits'] } })

Saída:

// Ambos retornam o mesmo resultado, mas $expr tem melhor desempenho

📌 Notas

Mais casos práticos em breve.

📚 Tutoriais Relacionados

❓ Perguntas Frequentes

QPor que $where é lento?
AEle avalia JavaScript por documento no servidor, sem suporte a índices.
QComo escolho entre $where e $expr?
APrefira $expr: melhor desempenho e suporte a índices; use $where apenas para lógica JS personalizada.
Q$where tem riscos de segurança?
ASim. Concatenar entrada do usuário na string permite injeção; parametrize ou mude para $expr.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%