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

การคำนวณค่าเฉลี่ยต่อเอกสารพร้อมเรียงลำดับใน MongoDB

คำนวณค่าเฉลี่ย (Average) ต่อเอกสารและเรียงลำดับด้วย Aggregation

บทความนี้สาธิตการใช้ $addFields คำนวณค่าเฉลี่ยของอาร์เรย์ด้วย $avg แล้วใช้ $sort เรียงลำดับจากน้อยไปมาก

ขั้นตอนที่ 1: สร้าง Collection และเพิ่มข้อมูลตัวอย่าง

> db.calculateAverage.insertOne({'Value':[10,20,80]});
{ "acknowledged": true, "insertedId": ObjectId("5e0383e3f5e889d7a51994dc") }
> db.calculateAverage.insertOne({'Value':[12,15,16]});
{ "acknowledged": true, "insertedId": ObjectId("5e0383edf5e889d7a51994dd") }
> db.calculateAverage.insertOne({'Value':[30,35,40]});
{ "acknowledged": true, "insertedId": ObjectId("5e0383f5f5e889d7a51994de") }

ขั้นตอนที่ 2: แสดงข้อมูลทั้งหมด

> db.calculateAverage.find().pretty();

ผลลัพธ์:

{ "_id": ObjectId("5e0383e3f5e889d7a51994dc"), "Value": [10, 20, 80] }
{ "_id": ObjectId("5e0383edf5e889d7a51994dd"), "Value": [12, 15, 16] }
{ "_id": ObjectId("5e0383f5f5e889d7a51994de"), "Value": [30, 35, 40] }

ขั้นตอนที่ 3: Aggregation Pipeline คำนวณเฉลี่ยและเรียง

> db.calculateAverage.aggregate([
    { "$addFields": { "calavg": { "$avg": "$Value" } }},
    { "$sort": { "calavg": 1 } }
], function(err, out) { res.send(out) });

ผลลัพธ์ที่ได้ (เรียงจากค่าเฉลี่ยน้อยไปมาก)

{ "_id": ObjectId("5e0383edf5e889d7a51994dd"), "Value": [12, 15, 16], "calavg": 14.333333333333334 }
{ "_id": ObjectId("5e0383f5f5e889d7a51994de"), "Value": [30, 35, 40], "calavg": 35 }
{ "_id": ObjectId("5e0383e3f5e889d7a51994dc"), "Value": [10, 20, 80], "calavg": 36.666666666666664 }

สรุป: $addFields เพิ่มฟิลด์ใหม่โดยคำนวณจากฟิลด์เดิม ($avg สำหรับอาร์เรย์ตัวเลข) แล้ว $sort: 1 เรียงจากน้อยไปมาก (-1 สำหรับมากไปน้อย)