Di MongoDB, $arrayElemAt
operator pipeline agregasi mengembalikan elemen pada indeks array yang ditentukan.
Ia menerima dua argumen;
- Array
- Indeks elemen yang ingin Anda ambil
Contoh
Misalkan kita memiliki koleksi yang disebut posts
dengan dokumen berikut:
{ "_id" : 1, "title" : "Hello World!", "body" : "This is a test post for the purposes of testing", "tags" : [ "html", "css", "sql", "xml" ], "status" : null }
Dalam dokumen ini, tags
bidang berisi larik.
Kita dapat menggunakan $arrayElemAt
operator untuk mengembalikan elemen array pada indeks tertentu.
Contoh:
db.posts.aggregate([
{
$project: {
"tag": { $arrayElemAt: [ "$tags", 0 ] }
}
}
])
Hasil:
{ "_id" : 1, "tag" : "html" }
Dalam hal ini, kami mengembalikan elemen array pertama. Array berbasis nol, jadi 0
mengacu pada elemen pertama dalam array.
Tip:Dari MongoDB 4.4, kita juga bisa menggunakan $first
operator untuk mengembalikan elemen pertama dalam array.
Berikut ini contoh mendapatkan elemen kedua:
db.posts.aggregate([
{
$project: {
"tag": { $arrayElemAt: [ "$tags", 1 ] }
}
}
])
Hasil:
{ "_id" : 1, "tag" : "css" }
Nilai Negatif untuk Indeks
Anda dapat memberikan nilai negatif untuk argumen kedua. Saat Anda melakukan ini, $arrayElemAt
menghitung mundur dari akhir larik.
Contoh:
db.posts.aggregate([
{
$project: {
"tag": { $arrayElemAt: [ "$tags", -1 ] }
}
}
])
Hasil:
{ "_id" : 1, "tag" : "xml" }
Dalam hal ini, kita mendapatkan elemen terakhir dalam array.
Dari MongoDB 4.4, kita juga dapat menggunakan $last
operator untuk mendapatkan elemen larik terakhir.
Menggabungkan dengan Operator Lain
Anda dapat menggunakan $arrayElemAt
dengan operator lain untuk menghasilkan hasil yang Anda butuhkan.
Berikut ini contoh menggabungkannya dengan $binarySize
operator untuk mengembalikan ukuran elemen larik tertentu.
db.posts.aggregate([
{
$project: {
"tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
}
}
])
Hasil:
{ "_id" : 1, "tagsSize" : 4 }