การเข้าถึง element สุดท้าย (หรือ index ใดก็ได้) ของ array ใน MongoDB ใช้ $arrayElemAt ใน aggregate pipeline รองรับ index ลบ (-1 = ตัวสุดท้าย)
สร้างคอลเลกชันและข้อมูลตัวอย่าง
> db.demo103.insertOne({
"Details" : [
{ "StudentId" : 101, "Details" : "MongoDB" },
{ "StudentId" : 102, "Details" : "MySQL" },
{ "StudentId" : 103, "Details" : "Java" }
],
"Details1" : [ { "StudentId" : 104, "Number" : 3 } ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2ed2dd9fd5fd66da21446e") }
แสดงข้อมูล
> db.demo103.find();
ผลลัพธ์: Details มี 3 elements, Details1 มี 1 element
Query ดึง Element สุดท้ายของ Details แล้ว Filter
> db.demo103.aggregate([
{ $project: {
Details1: 1,
Details: { $arrayElemAt: ["$Details", -1] }
}},
{ $match: { "Details.StudentId": 103 } }
])
คำอธิบาย:
$arrayElemAt: ["$Details", -1]: ดึง element index -1 (ตัวสุดท้าย) ของ array Details- ผลลัพธ์ของ $project: Details จะกลายเป็น object เดียว (ไม่ใช่ array)
$match: กรองต่อเฉพาะที่ Details.StudentId = 103
ผลลัพธ์
{ "_id" : ObjectId("5e2ed2dd9fd5fd66da21446e"), "Details1" : [
{ "StudentId" : 104, "Number" : 3 }
], "Details" : { "StudentId" : 103, "Details" : "Java" } }
$arrayElemAt Syntax
{ $arrayElemAt: [ , ] }
| Index | ความหมาย |
|---|---|
| 0 | Element แรก |
| 1 | Element ที่ 2 |
| -1 | Element สุดท้าย |
| -2 | Element ต่อจากสุดท้าย |