Để sắp xếp (order by) theo tổng của hai trường trong MongoDB, bạn sử dụng Aggregation Framework với $add trong stage $project để tạo trường tổng, sau đó $sort theo trường đó.
Tạo dữ liệu mẫu
> db.orderByTwoFieldsDemo.insertOne({"Value1":10,"Value2":35});
{ "acknowledged" : true, "insertedId" : ObjectId("5ca285576304881c5ce84baa") }
> db.orderByTwoFieldsDemo.insertOne({"Value1":12,"Value2":5});
{ "acknowledged" : true, "insertedId" : ObjectId("5ca2855f6304881c5ce84bab") }
> db.orderByTwoFieldsDemo.insertOne({"Value1":55,"Value2":65});
{ "acknowledged" : true, "insertedId" : ObjectId("5ca285686304881c5ce84bac") }
Hiển thị tất cả:
> db.orderByTwoFieldsDemo.find().pretty();
Trường hợp 1: Sắp xếp tăng dần (Ascending)
> db.orderByTwoFieldsDemo.aggregate( [ {$project:{Value1:1, Value2:1, orderBySumValue:{$add: ["$Value1", "$Value2"]}}}, {$sort:{orderBySumValue:1}} ] );Kết quả:
Trường hợp 2: Sắp xếp giảm dần (Descending)
> db.orderByTwoFieldsDemo.aggregate( [ {$project:{Value1:1, Value2:1, orderBySumValue:{$add: ["$Value1", "$Value2"]}}}, {$sort:{orderBySumValue:-1}} ] );Kết quả:
Điểm chính: Sử dụng
$add: ["$trường1", "$trường2"]trong$projectđể tính tổng, đặt tên trường mới (ví dụorderBySumValue), rồi$sorttheo trường mới đó. Có thể mở rộng cho nhiều trường hơn.