หากต้องการจัดเรียงตามความแตกต่าง ให้ใช้ aggregate() ใน MongoDB ให้เราสร้างคอลเลกชันที่มีเอกสาร -
> db.demo155.insertOne({"Scores":[{"Value":45},{"Value":50}]}); { "acknowledged" : true, "insertedId" : ObjectId("5e354584fdf09dd6d08539e3") } > db.demo155.insertOne({"Scores":[{"Value":60},{"Value":10}]}); { "acknowledged" : true, "insertedId" : ObjectId("5e35458efdf09dd6d08539e4") } > db.demo155.insertOne({"Scores":[{"Value":100},{"Value":95}]}); { "acknowledged" : true, "insertedId" : ObjectId("5e354599fdf09dd6d08539e5") }
แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -
> db.demo155.find();
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : ObjectId("5e354584fdf09dd6d08539e3"), "Scores" : [ { "Value" : 45 }, { "Value" : 50 } ] } { "_id" : ObjectId("5e35458efdf09dd6d08539e4"), "Scores" : [ { "Value" : 60 }, { "Value" : 10 } ] } { "_id" : ObjectId("5e354599fdf09dd6d08539e5"), "Scores" : [ { "Value" : 100 }, { "Value" : 95 } ] }
ต่อไปนี้เป็นแบบสอบถามเพื่อจัดเรียงตามความแตกต่างในเนื้อหาอาร์เรย์กับ MongoDB -
> db.demo155.aggregate([ ... { "$match": { "Scores.1": { "$exists": true } } }, ... { "$project": { ... "Scores": "$Scores", ... "sub": { ... "$let": { ... "vars": { ... "f": { "$arrayElemAt": [ "$Scores", -2 ] }, ... "l": { "$arrayElemAt": [ "$Scores", -1 ] } ... }, ... "in": { "$subtract": [ "$$l.Value", "$$f.Value" ] } ... } ... } ... }}, ... { "$sort": { "sub": -1 } } ... ])
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : ObjectId("5e354584fdf09dd6d08539e3"), "Scores" : [ { "Value" : 45 }, { "Value" : 50 } ], "sub" : 5 } { "_id" : ObjectId("5e354599fdf09dd6d08539e5"), "Scores" : [ { "Value" : 100 }, { "Value" : 95 } ], "sub" : -5 } { "_id" : ObjectId("5e35458efdf09dd6d08539e4"), "Scores" : [ { "Value" : 60 }, { "Value" : 10 } ], "sub" : -50 }