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

การใช้ MongoDB Aggregate และ $group หาความถี่ของชื่อ (Frequency)

ใช้ 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" - จัดกลุ่มตามค่าของฟิลด์ Name
  • Frequency: { $sum: 1 } - นับ 1 ต่อเอกสารในแต่ละกลุ่ม

สามารถเพิ่ม { $sort: { Frequency: -1 } } เพื่อเรียงจากมากไปน้อยได้