I MongoDB er $arrayElemAt
aggregeringspipeline-operator returnerer elementet ved det angivne array-indeks.
Den accepterer to argumenter;
- Arrayet
- Indekset for det element, du vil hente
Eksempel
Antag, at vi har en samling kaldet posts
med følgende dokument:
{ "_id" : 1, "title" : "Hello World!", "body" : "This is a test post for the purposes of testing", "tags" : [ "html", "css", "sql", "xml" ], "status" : null }
I dette dokument er tags
felt indeholder en matrix.
Vi kan bruge $arrayElemAt
operator for at returnere et array-element ved et specifikt indeks.
Eksempel:
db.posts.aggregate([
{
$project: {
"tag": { $arrayElemAt: [ "$tags", 0 ] }
}
}
])
Resultat:
{ "_id" : 1, "tag" : "html" }
I dette tilfælde returnerer vi det første array-element. Arrays er nul-baserede, og derfor 0
henviser til det første element i arrayet.
Tip:Fra MongoDB 4.4 kan vi også bruge $first
operator for at returnere det første element i et array.
Her er et eksempel på at få det andet element:
db.posts.aggregate([
{
$project: {
"tag": { $arrayElemAt: [ "$tags", 1 ] }
}
}
])
Resultat:
{ "_id" : 1, "tag" : "css" }
Negative værdier for indekset
Du kan angive en negativ værdi for det andet argument. Når du gør dette, $arrayElemAt
tæller baglæns fra slutningen af arrayet.
Eksempel:
db.posts.aggregate([
{
$project: {
"tag": { $arrayElemAt: [ "$tags", -1 ] }
}
}
])
Resultat:
{ "_id" : 1, "tag" : "xml" }
I dette tilfælde får vi det sidste element i arrayet.
Fra MongoDB 4.4 kan vi også bruge $last
operator for at hente det sidste array-element.
Kombinering med andre operatører
Du kan bruge $arrayElemAt
med andre operatører for at opnå de resultater, du har brug for.
Her er et eksempel på at kombinere det med $binarySize
operator for at returnere størrelsen af et specifikt array-element.
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
}
}
])
Resultat:
{ "_id" : 1, "tagsSize" : 4 }