V MongoDB, $arrayElemAt
operátor agregačního kanálu vrátí prvek na zadaném indexu pole.
Přijímá dva argumenty;
- Pole
- Index prvku, který chcete načíst
Příklad
Předpokládejme, že máme kolekci nazvanou posts
s následujícím dokumentem:
{ "_id" : 1, "title" : "Hello World!", "body" : "This is a test post for the purposes of testing", "tags" : [ "html", "css", "sql", "xml" ], "status" : null }
V tomto dokumentu tags
pole obsahuje pole.
Můžeme použít $arrayElemAt
operátor vrátí prvek pole na konkrétním indexu.
Příklad:
db.posts.aggregate([
{
$project: {
"tag": { $arrayElemAt: [ "$tags", 0 ] }
}
}
])
Výsledek:
{ "_id" : 1, "tag" : "html" }
V tomto případě vrátíme první prvek pole. Pole jsou založeny na nule, a tedy 0
odkazuje na první prvek v poli.
Tip:Od MongoDB 4.4 můžeme také použít $first
operátor vrátí první prvek v poli.
Zde je příklad získání druhého prvku:
db.posts.aggregate([
{
$project: {
"tag": { $arrayElemAt: [ "$tags", 1 ] }
}
}
])
Výsledek:
{ "_id" : 1, "tag" : "css" }
Záporné hodnoty indexu
Pro druhý argument můžete zadat zápornou hodnotu. Když to uděláte, $arrayElemAt
počítá zpětně od konce pole.
Příklad:
db.posts.aggregate([
{
$project: {
"tag": { $arrayElemAt: [ "$tags", -1 ] }
}
}
])
Výsledek:
{ "_id" : 1, "tag" : "xml" }
V tomto případě získáme poslední prvek v poli.
Od MongoDB 4.4 můžeme také použít $last
operátor k získání posledního prvku pole.
Kombinace s jinými operátory
Můžete použít $arrayElemAt
s jinými operátory, abyste dosáhli požadovaných výsledků.
Zde je příklad kombinace s $binarySize
operátor vrátí velikost konkrétního prvku pole.
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
}
}
])
Výsledek:
{ "_id" : 1, "tagsSize" : 4 }