In MongoDB, il $arrayElemAt
l'operatore della pipeline di aggregazione restituisce l'elemento in corrispondenza dell'indice di matrice specificato.
Accetta due argomenti;
- L'array
- L'indice dell'elemento che vuoi recuperare
Esempio
Supponiamo di avere una raccolta chiamata posts
con il seguente documento:
{ "_id" : 1, "title" : "Hello World!", "body" : "This is a test post for the purposes of testing", "tags" : [ "html", "css", "sql", "xml" ], "status" : null }
In questo documento, i tags
contiene un array.
Possiamo usare $arrayElemAt
operatore per restituire un elemento dell'array in corrispondenza di un indice specifico.
Esempio:
db.posts.aggregate([
{
$project: {
"tag": { $arrayElemAt: [ "$tags", 0 ] }
}
}
])
Risultato:
{ "_id" : 1, "tag" : "html" }
In questo caso, restituiamo il primo elemento dell'array. Gli array sono a base zero, quindi 0
fa riferimento al primo elemento dell'array.
Suggerimento:da MongoDB 4.4, possiamo anche utilizzare $first
per restituire il primo elemento di una matrice.
Ecco un esempio per ottenere il secondo elemento:
db.posts.aggregate([
{
$project: {
"tag": { $arrayElemAt: [ "$tags", 1 ] }
}
}
])
Risultato:
{ "_id" : 1, "tag" : "css" }
Valori negativi per l'indice
È possibile fornire un valore negativo per il secondo argomento. Quando lo fai, $arrayElemAt
conta all'indietro dalla fine dell'array.
Esempio:
db.posts.aggregate([
{
$project: {
"tag": { $arrayElemAt: [ "$tags", -1 ] }
}
}
])
Risultato:
{ "_id" : 1, "tag" : "xml" }
In questo caso, otteniamo l'ultimo elemento nell'array.
Da MongoDB 4.4, possiamo anche usare $last
operatore per ottenere l'ultimo elemento dell'array.
Combinazione con altri operatori
Puoi usare $arrayElemAt
con altri operatori per produrre i risultati di cui hai bisogno.
Ecco un esempio di combinazione con $binarySize
operatore per restituire la dimensione di un elemento dell'array specifico.
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
}
}
])
Risultato:
{ "_id" : 1, "tagsSize" : 4 }