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

วิธีหาค่าสูงสุดของแต่ละกลุ่มที่แตกต่างกันใน MongoDB

ใช้ $sort และ $group ใน Aggregate

เรียงลำดับค่าจากมากไปน้อยก่อน ($sort: { value: -1 }) แล้วจับกลุ่มตาม id และเอาค่าแรก ($first) ซึ่งจะเป็นค่าสูงสุด

สร้างข้อมูลตัวอย่าง

> db.demo750.insertOne({id:101,value:50});
> db.demo750.insertOne({id:102,value:40});
> db.demo750.insertOne({id:101,value:110});

แสดงข้อมูลทั้งหมด

> db.demo750.find();

ผลลัพธ์:

{ "_id" : ObjectId("5eae74b2a930c785c834e566"), "id" : 101, "value" : 50 }
{ "_id" : ObjectId("5eae74c8a930c785c834e567"), "id" : 102, "value" : 40 }
{ "_id" : ObjectId("5eae74dba930c785c834e568"), "id" : 101, "value" : 110 }

คิวรีหาค่า value สูงสุดของแต่ละ id

> db.demo750.aggregate([
    { $sort: { value: -1 } },
    { $group: { _id: "$id", value: { $first: "$value" } } },
    { $project: { id: "$_id", value: 1 } }
])

ผลลัพธ์

{ "_id" : 102, "value" : 40, "id" : 102 }
{ "_id" : 101, "value" : 110, "id" : 101 }