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

หาเอกสาร MongoDB ที่อาร์เรย์มีค่าซ้ำมากที่สุดของค่าเฉพาะ

ใช้ 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 ครั้ง (มากที่สุด):