$arrayElemAt (Obter Elemento do Array por Índice)
Última atualização: 2026-10-09
$arrayElemAt (Obter Elemento do Array por Índice)
$arrayElemAt retorna o elemento em uma determinada posição de índice em um array. É o operador central para acesso a arrays por posição em expressões de agregação, frequentemente usado para pegar o primeiro item de um pedido, o último elemento de um array ou uma posição específica dentro de $project. Os índices começam em 0, índices negativos contam a partir do fim, e acesso fora do intervalo retorna null em vez de gerar erro. Diferente de $first/$last, $arrayElemAt alcança qualquer posição, tornando-o mais flexível.
| Categoria | Array |
|---|---|
| Versão do MongoDB | 1.0+ |
| Idioma do Exemplo | mongosh (Shell) |
📝 Sintaxe
{ $arrayElemAt: [ <array>, <índice> ] }
⚙️ Parâmetros
| array | A matriz, ou uma expressão que resolva para uma matriz. |
|---|---|
| índice | Um índice inteiro; valores negativos contam a partir do fim, -1 é o último elemento. |
Retorno:O elemento no índice informado; null se estiver fora do intervalo ou a matriz for null
▶ Exemplo
Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):
// $arrayElemAt: obter o primeiro item de um pedido
db.orders.aggregate([
{ $project: {
firstItem: { $arrayElemAt: ['$items', 0] }
} }
])
Saída:
{ '_id': 1, 'firstItem': { 'sku': 'A01', 'qty': 2 } }
{ '_id': 2, 'firstItem': { 'sku': 'B02', 'qty': 1 } }
📌 Notas
- Os índices começam em 0; use -1 para o último elemento sem calcular $size antes
- Acesso fora do intervalo retorna null, não erro; combine com $ifNull para um padrão
- Diferente de $first/$last, que alcançam apenas as extremidades, $arrayElemAt acessa qualquer posição
🏷️ Tags Relacionados
💡 Casos Relacionados
Mais casos práticos em breve.
📚 Tutoriais Relacionados
❓ Perguntas Frequentes
QComo obter o último elemento de um array com $arrayElemAt?
AUse -1 como índice, ex.: { $arrayElemAt: ['$arr', -1] }, sem calcular o comprimento antes.
QUm índice fora do intervalo gera erro?
ANão — retorna null. Envolva com $ifNull para fornecer um padrão.
QQual é a diferença entre $arrayElemAt e $first?
A$first sempre pega o primeiro elemento; $arrayElemAt pega qualquer índice, incluindo negativos, então é mais flexível.