ใช้ $unwind และ $group ร่วมกับ $sum
เพื่อนับความถี่ของแต่ละค่าในอาร์เรย์ข้ามหลายเอกสาร ให้ใช้ pipeline: $unwind แยกอาร์เรย์, $group นับแต่ละค่า, แล้วรวมผลลัพธ์
> db.demo184.insertOne({"Names": ["Chris", "David", "Bob"]});
คำสั่งนับความถี่:
db.demo184.aggregate([
{ "$unwind": "$Names" },
{ "$group": { "_id": "$Names", "count": { "$sum": 1 } } },
{ "$group": { "_id": null, "counts": { "$push": { "k": "$_id", "v": "$count" } } } },
{ "$replaceRoot": { "newRoot": { "$arrayToObject": "$counts" } } }
])
ผลลัพธ์: { "Carol": 1, "David": 1, "Chris": 3, "Bob": 2, "Mike": 1 }