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 }