Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

วิธีรวมขนาดอาร์เรย์ (Sum Array Size) ใน MongoDB

ใช้ $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" เพื่อรวมขนาดอาร์เรย์แยกตามกลุ่ม (เช่น รวมจำนวนวิชาต่อแผนก)