No MongoDB, o
$arrayElemAt operador de pipeline de agregação retorna o elemento no índice de matriz especificado. Ele aceita dois argumentos;
- A matriz
- O índice do elemento que você deseja recuperar
Exemplo
Suponha que tenhamos uma coleção chamada
posts com o seguinte documento:{
"_id" : 1,
"title" : "Hello World!",
"body" : "This is a test post for the purposes of testing",
"tags" : [
"html",
"css",
"sql",
"xml"
],
"status" : null
} Neste documento, as
tags campo contém uma matriz. Podemos usar o
$arrayElemAt operador para retornar um elemento de matriz em um índice específico. Exemplo:
db.posts.aggregate([
{
$project: {
"tag": { $arrayElemAt: [ "$tags", 0 ] }
}
}
]) Resultado:
{ "_id" : 1, "tag" : "html" } Nesse caso, retornamos o primeiro elemento do array. As matrizes são baseadas em zero e, portanto,
0 refere-se ao primeiro elemento na matriz. Dica:A partir do MongoDB 4.4, também podemos usar o
$first operador para retornar o primeiro elemento em uma matriz. Aqui está um exemplo de como obter o segundo elemento:
db.posts.aggregate([
{
$project: {
"tag": { $arrayElemAt: [ "$tags", 1 ] }
}
}
]) Resultado:
{ "_id" : 1, "tag" : "css" } Valores negativos para o índice
Você pode fornecer um valor negativo para o segundo argumento. Ao fazer isso,
$arrayElemAt conta para trás a partir do final da matriz. Exemplo:
db.posts.aggregate([
{
$project: {
"tag": { $arrayElemAt: [ "$tags", -1 ] }
}
}
]) Resultado:
{ "_id" : 1, "tag" : "xml" } Nesse caso, obtemos o último elemento da matriz.
A partir do MongoDB 4.4, também podemos usar o
$last operador para obter o último elemento da matriz. Combinando com outros operadores
Você pode usar
$arrayElemAt com outros operadores para produzir os resultados que você precisa. Aqui está um exemplo de combinação com o
$binarySize operador para retornar o tamanho de um elemento de array específico. db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
}
}
]) Resultado:
{ "_id" : 1, "tagsSize" : 4 }