$elemMatch (Correspondência de Elemento de Array)
Última atualização: 2026-10-09
$elemMatch (Correspondência de Elemento de Array)
$elemMatch corresponde a documentos onde pelo menos um elemento do array satisfaz todas as condições fornecidas. `{ scores: { $elemMatch: { $gt: 80, $lt: 90 } } }` exige que uma única pontuação seja ao mesmo tempo acima de 80 e abaixo de 90. Sem $elemMatch, consultas de array com múltiplas condições podem corresponder em elementos diferentes — a armadilha clássica de consultas em arrays.
| Categoria | Array |
|---|---|
| Versão do MongoDB | 1.0+ |
| Idioma do Exemplo | mongosh (Shell) |
📝 Sintaxe
{ <campo>: { $elemMatch: { <condição1>, <condição2>, ... } } }
⚙️ Parâmetros
| campo | O campo de matriz a corresponder. |
|---|---|
| condição | Condições de consulta que o elemento deve satisfazer por completo. |
Retorno:Cursor dos documentos correspondentes
▶ Exemplo
Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):
// $elemMatch: uma única pontuação entre 80 e 90
// O mesmo elemento deve satisfazer ambas
db.students.find({ scores: { $elemMatch: { $gt: 80, $lt: 90 } } })
// Errado: pode corresponder em elementos diferentes
// db.students.find({ scores: { $gt: 80, $lt: 90 } })
Saída:
// Retorna estudantes com uma única pontuação acima de 80 e abaixo de 90
📌 Notas
- Todas as condições devem valer para o mesmo elemento — a semântica central
- Também funciona para arrays de documentos: { $elemMatch: { name: 'A', score: { $gt: 90 } } }
- Com uma única condição equivale à correspondência direta; com várias, é obrigatório
🏷️ Tags Relacionados
💡 Casos Relacionados
Consultas a matrizes e documentos aninhados
Operadores de consulta: um guia completo com mais de 30 operadores
📚 Tutoriais Relacionados
❓ Perguntas Frequentes
QQual é a diferença entre $elemMatch e condições de array simples?
A{ $gt: 80, $lt: 90 } simples pode corresponder em elementos diferentes; $elemMatch força que um único elemento satisfaça ambas.
Q$elemMatch pode corresponder a arrays de documentos aninhados?
ASim, referencie campos aninhados, ex.: { $elemMatch: { type: 'exam', score: { $gte: 90 } } }.
Q$elemMatch pode ser aplicado a apenas um campo?
ASim, ele atinge um único campo de array; use um $elemMatch separado por campo de array.