ใช้ $size เพื่อหาขนาดอาร์เรย์ของแต่ละเอกสาร แล้วใช้ $sum ใน $group เพื่อรวมขนาดทั้งหมด
ตัวอย่างข้อมูลทดสอบ (อาร์เรย์ Subjects)
> db.demo231.insertOne({"Subjects": ["MongoDB", "MySQL", "SQL Server"]});
{ "acknowledged": true, "insertedId": ObjectId("5e3fc73ff4cebbeaebec5143") }
> db.demo231.insertOne({"Subjects": ["Java", "C", "C++"]});
{ "acknowledged": true, "insertedId": ObjectId("5e3fc757f4cebbeaebec5144") }
> db.demo231.insertOne({"Subjects": ["Python", "Spring"]});
{ "acknowledged": true, "insertedId": ObjectId("5e3fc762f4cebbeaebec5145") }
แสดงข้อมูลทั้งหมด
> db.demo231.find();
ผลลัพธ์ (ขนาดอาร์เรย์: 3, 3, 2)
{
"_id": ObjectId("5e3fc73ff4cebbeaebec5143"),
"Subjects": ["MongoDB", "MySQL", "SQL Server"]
}
{
"_id": ObjectId("5e3fc757f4cebbeaebec5144"),
"Subjects": ["Java", "C", "C++"]
}
{
"_id": ObjectId("5e3fc762f4cebbeaebec5145"),
"Subjects": ["Python", "Spring"]
}
Aggregate: รวมขนาดอาร์เรย์ทั้งหมด
> db.demo231.aggregate([
{ $group: { _id: "_id", TotalValue: { $sum: { $size: "$Subjects" } } } }
]);
ผลลัพธ์ (TotalValue = 3 + 3 + 2 = 8)
{
"_id": "_id",
"TotalValue": 8
}
คำอธิบาย:
$size: "$Subjects"- คืนขนาดอาร์เรย์ของแต่ละเอกสาร$sum: { $size: "$Subjects" }- รวมขนาดอาร์เรย์ของทุกเอกสาร_id: "_id"- จัดกลุ่มทั้งหมดเป็นกลุ่มเดียว (ค่าคงที่)
การประยุกต์: เปลี่ยน _id: "$SomeField" เพื่อรวมขนาดอาร์เรย์แยกตามกลุ่ม (เช่น รวมจำนวนวิชาต่อแผนก)