Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Sắp xếp theo tổng hai trường trong MongoDB?

Để 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 $sort theo trường mới đó. Có thể mở rộng cho nhiều trường hơn.