ใช้ aggregate() พร้อม $project, $filter, $size, $group, $sort, $limit เพื่อหาเอกสารที่อาร์เรย์มีค่า 65 ซ้ำมากที่สุด
สร้างคอลเลกชันพร้อมเอกสาร:
> db.countOccurrencesDemo.insertOne({"ListOfValues":[65,87,89,65,67,87,87,87]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e06ef9325ddae1f53b621eb") }
> db.countOccurrencesDemo.insertOne({"ListOfValues":[102,65,87,65,89,65,89,65,89,65]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e06efaa25ddae1f53b621ec") }
แสดงเอกสารทั้งหมด:
> db.countOccurrencesDemo.find();
ผลลัพธ์ - เอกสารแรกมี 65 สองครั้ง, เอกสารที่สองมี 65 ห้าครั้ง:
คำสั่ง Aggregation: $project นับจำนวน 65 ด้วย $filter และ $size, $group จัดกลุ่มตามจำนวน, $sort เรียงมากไปน้อย, $limit 1:
> db.countOccurrencesDemo.aggregate( ... [ ... { "$project": { ... "ListOfValues": 1, ... "OccurencesValue": { ... "$size": { ... "$filter": { ... "input": "$ListOfValues", ... "as": "v", ... "cond": { "$eq": [ "$$v", 65] } ... } ... } ... } ... }}, ... { "$group": { ... "_id": "$OccurencesValue", ... "MyValues": { "$push": "$$ROOT" } ... }}, ... { "$sort": { "_id": -1 } }, ... { "$limit": 1 } ... ] ... );ผลลัพธ์ - ได้เอกสารที่สอง ซึ่งมี 65 ซ้ำ 5 ครั้ง (มากที่สุด):