ใช้ $project ร่วม $size เพื่อนับจำนวนองค์ประกอบในอาร์เรย์ (ไม่ต้อง $unwind)
ตัวอย่างข้อมูลทดสอบ
> db.demo382.insertOne({
"Name" : "David",
"details" : [
{"SubjectName":"MySQL"},
{"SubjectName":"MongoDB"},
{"SubjectName":"Java"}
]
});
แสดงข้อมูล
> db.demo382.find().pretty();
{
"_id" : ObjectId("5e5b5e1c22064be7ab44e7f0"),
"Name" : "David",
"details" : [
{"SubjectName" : "MySQL"},
{"SubjectName" : "MongoDB"},
{"SubjectName" : "Java"}
]
}
คำสั่ง Aggregation นับจำนวน details
> db.demo382.aggregate([
{"$match": {"Name": "David"}},
{"$project": {"count": {"$size": "$details"}}}
])
ผลลัพธ์
{ "_id" : ObjectId("5e5b5e1c22064be7ab44e7f0"), "count" : 3 }
สรุป: $size คืนจำนวนองค์ประกอบในอาร์เรย์ได้ทันที ใช้ใน $project, $match, $addFields ฯลฯ ไม่ต้อง $unwind แล้ว $group นับ (เร็วกว่ามาก)