In MongoDB ist das $arrayElemAt
Der Aggregations-Pipeline-Operator gibt das Element am angegebenen Array-Index zurück.
Es akzeptiert zwei Argumente;
- Das Array
- Der Index des Elements, das Sie abrufen möchten
Beispiel
Angenommen, wir haben eine Sammlung namens posts
mit folgendem Dokument:
{ "_id" : 1, "title" : "Hello World!", "body" : "This is a test post for the purposes of testing", "tags" : [ "html", "css", "sql", "xml" ], "status" : null }
In diesem Dokument sind die tags
Feld enthält ein Array.
Wir können das $arrayElemAt
verwenden Operator, um ein Array-Element an einem bestimmten Index zurückzugeben.
Beispiel:
db.posts.aggregate([
{
$project: {
"tag": { $arrayElemAt: [ "$tags", 0 ] }
}
}
])
Ergebnis:
{ "_id" : 1, "tag" : "html" }
In diesem Fall geben wir das erste Array-Element zurück. Arrays sind nullbasiert, also 0
bezieht sich auf das erste Element im Array.
Tipp:Ab MongoDB 4.4 können wir auch den $first
verwenden Operator, um das erste Element in einem Array zurückzugeben.
Hier ist ein Beispiel für das Abrufen des zweiten Elements:
db.posts.aggregate([
{
$project: {
"tag": { $arrayElemAt: [ "$tags", 1 ] }
}
}
])
Ergebnis:
{ "_id" : 1, "tag" : "css" }
Negative Werte für den Index
Sie können für das zweite Argument einen negativen Wert angeben. Wenn Sie dies tun, $arrayElemAt
zählt vom Ende des Arrays rückwärts.
Beispiel:
db.posts.aggregate([
{
$project: {
"tag": { $arrayElemAt: [ "$tags", -1 ] }
}
}
])
Ergebnis:
{ "_id" : 1, "tag" : "xml" }
In diesem Fall erhalten wir das letzte Element im Array.
Ab MongoDB 4.4 können wir auch $last
verwenden Operator, um das letzte Array-Element zu erhalten.
Kombination mit anderen Operatoren
Sie können $arrayElemAt
verwenden mit anderen Operatoren, um die gewünschten Ergebnisse zu erzielen.
Hier ist ein Beispiel für die Kombination mit $binarySize
Operator, um die Größe eines bestimmten Array-Elements zurückzugeben.
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
}
}
])
Ergebnis:
{ "_id" : 1, "tagsSize" : 4 }