ใช้ aggregate() ร่วมกับ $group และ $sum เพื่อนับจำนวนครั้งที่ค่าฟิลด์ซ้ำกัน (Frequency Count)
ตัวอย่างข้อมูลทดสอบ (มีชื่อซ้ำกัน)
> db.demo232.insertOne({_id: 101, Name: "Chris"});
{ "acknowledged": true, "insertedId": 101 }
> db.demo232.insertOne({_id: 102, Name: "Bob"});
{ "acknowledged": true, "insertedId": 102 }
> db.demo232.insertOne({_id: 103, Name: "Bob"});
{ "acknowledged": true, "insertedId": 103 }
> db.demo232.insertOne({_id: 104, Name: "David"});
{ "acknowledged": true, "insertedId": 104 }
> db.demo232.insertOne({_id: 105, Name: "Chris"});
{ "acknowledged": true, "insertedId": 105 }
แสดงข้อมูลทั้งหมด
> db.demo232.find();
ผลลัพธ์
{
"_id": 101, "Name": "Chris"
}
{
"_id": 102, "Name": "Bob"
}
{
"_id": 103, "Name": "Bob"
}
{
"_id": 104, "Name": "David"
}
{
"_id": 105, "Name": "Chris"
}
Aggregate: จัดกลุ่มตาม Name และนับจำนวน
> db.demo232.aggregate(
{ $group: { _id: "$Name", Frequency: { $sum: 1 } } }
);
ผลลัพธ์ (ความถี่ของแต่ละชื่อ)
{
"_id": "David",
"Frequency": 1
}
{
"_id": "Bob",
"Frequency": 2
}
{
"_id": "Chris",
"Frequency": 2
}
คำอธิบาย:
_id: "$Name"- จัดกลุ่มตามค่าของฟิลด์ NameFrequency: { $sum: 1 }- นับ 1 ต่อเอกสารในแต่ละกลุ่ม
สามารถเพิ่ม { $sort: { Frequency: -1 } } เพื่อเรียงจากมากไปน้อยได้