การดึงองค์ประกอบเดี่ยวจากอาร์เรย์ผลลัพธ์ด้วยดัชนี
เพื่อดึงองค์ประกอบเพียงตัวเดียวจากอาร์เรย์ผลลัพธ์ตามดัชนีที่ต้องการ สามารถใช้ Aggregation Pipeline ร่วมกับ $skip และ $limit ได้ โดย $skip ใช้สำหรับข้ามเอกสารตามจำนวนที่ระบุ
ตัวอย่างข้อมูลทดสอบ
> db.demo391.insertOne({ "_id": 101, "Name": "Chris", Values: ["101", "102"] });
> db.demo391.insertOne({ "_id": 111, "Name": "Chris", Values: ["101", "102"] });
> db.demo391.insertOne({ "_id": 121, "Name": "Chris", Values: ["101", "102"] });
แสดงข้อมูลทั้งหมด
> db.demo391.find();
ผลลัพธ์:
{ "_id": 101, "Name": "Chris", "Values": [ "101", "102" ] }
{ "_id": 111, "Name": "Chris", "Values": [ "101", "102" ] }
{ "_id": 121, "Name": "Chris", "Values": [ "101", "102" ] }
คำสั่งดึงเอกสารที่อยู่ตำแหน่งที่ 2 (ดัชนี 1)
> var i = 2;
> db.demo391.aggregate([
{ $match: { "Name": "Chris" } },
{ $skip: i - 1 },
{ $limit: 1 }
]);
ผลลัพธ์ที่ได้
{ "_id": 111, "Name": "Chris", "Values": [ "101", "102" ] }
คำอธิบาย
- $match: กรองเอกสารที่ Name เป็น "Chris"
- $skip: i - 1: ข้ามเอกสารแรก (i=2 หมายถึงข้าม 1 ตัว)
- $limit: 1: จำกัดผลลัพธ์เพียง 1 เอกสาร
วิธีนี้เหมาะสำหรับการแบ่งหน้า (pagination) หรือการดึงรายการเฉพาะตำแหน่งจากผลลัพธ์ที่เรียงลำดับแล้ว