การใช้ $group กับ Dot Notation สำหรับอาร์เรย์ซ้อน
เมื่อข้อมูลอยู่ในอาร์เรย์ของออบเจ็กต์ สามารถใช้ dot notation เข้าถึงฟิลด์ภายในได้โดยตรงใน $group
ตัวอย่างข้อมูล
> db.demo430.insertOne({
"details": [
{ "Name": "Chris" },
{ "Name": "David" },
{ "Name": "Adam" },
{ "Name": "Bob" }
]
});
แสดงข้อมูล
> db.demo430.find();
ผลลัพธ์:
{ "_id": ObjectId(...), "details": [{ "Name": "Chris" }, { "Name": "David" }, { "Name": "Adam" }, { "Name": "Bob" }] }
Query จัดกลุ่มตามชื่อในอาร์เรย์
> db.demo430.aggregate([{ "$group": { "_id": { "Name": "$details.Name" } }}]);
ผลลัพธ์
{ "_id": { "Name": ["Chris", "David", "Adam", "Bob"] } }
คำอธิบาย
$details.Name- ใช้ dot notation เข้าถึงฟิลด์ Name ภายในอาร์เรย์ details- MongoDB จะดึงค่า Name จากทุกอิลิเมนต์ในอาร์เรย์อัตโนมัติ
- ผลลัพธ์เป็นอาร์เรย์ของค่าที่ไม่ซ้ำกัน (unique values)
การประยุกต์ใช้
เทคนิคนี้เหมาะสำหรับการหาค่าที่ไม่ซ้ำกัน (distinct values) จากฟิลด์ภายในอาร์เรย์ของออบเจ็กต์ โดยไม่ต้องใช้ $unwind ก่อน