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 }