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

ค้นหาเอกสาร MongoDB พร้อมอาร์เรย์ที่มีค่าสูงสุดที่กำหนด


สำหรับสิ่งนี้ คุณสามารถใช้ aggregate() ให้เราสร้างคอลเลกชันที่มีเอกสารก่อน -

> 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")
}

ต่อไปนี้เป็นแบบสอบถามเพื่อแสดงเอกสารทั้งหมดจากคอลเลกชันโดยใช้วิธี find() -

> db.countOccurrencesDemo.find();

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -

{ "_id" : ObjectId("5e06ef9325ddae1f53b621eb"), "ListOfValues" : [ 65, 87, 89, 65, 67, 87, 87, 87 ] }
{ "_id" : ObjectId("5e06efaa25ddae1f53b621ec"), "ListOfValues" : [ 102, 65, 87, 65, 89, 65, 89, 65, 89, 65 ] }

นี่คือแบบสอบถามเพื่อค้นหาเอกสารที่มีอาร์เรย์ที่มีค่าสูงสุดเกิดขึ้น -

> 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 }
...    ]
... );

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -

{ "_id" : 5, "MyValues" : [ { "_id" : ObjectId("5e06efaa25ddae1f53b621ec"), "ListOfValues" : [ 102, 65, 87, 65, 89, 65, 89, 65, 89, 65 ], "OccurencesValue" : 5 } ] }