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

Sắp xếp (Sort) trong MongoDB Aggregate với $sort

Giai đoạn $sort trong aggregation pipeline cho phép sắp xếp tài liệu theo một hoặc nhiều trường, tăng dần (1) hoặc giảm dần (-1). Khác với find().sort(), $sort có thể dùng sau các biến đổi phức tạp (group, project, unwind...).

Dữ liệu mẫu

> db.demo164.insertOne({"StudentAge":24});
{ "acknowledged" : true, "insertedId" : ObjectId("5e36883d9e4f06af551997c8") }
> db.demo164.insertOne({"StudentAge":25});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3688409e4f06af551997c9") }
> db.demo164.insertOne({"StudentAge":22});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3688429e4f06af551997ca") }
> db.demo164.insertOne({"StudentAge":21});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3688439e4f06af551997cb") }

Xem dữ liệu

> db.demo164.find();
{ "_id" : ObjectId("5e36883d9e4f06af551997c8"), "StudentAge" : 24 }
{ "_id" : ObjectId("5e3688409e4f06af551997c9"), "StudentAge" : 25 }
{ "_id" : ObjectId("5e3688429e4f06af551997ca"), "StudentAge" : 22 }
{ "_id" : ObjectId("5e3688439e4f06af551997cb"), "StudentAge" : 21 }

Aggregate với $sort giảm dần

> db.demo164.aggregate([{ $sort : { StudentAge : -1 } }]);

Kết quả

{ "_id" : ObjectId("5e3688409e4f06af551997c9"), "StudentAge" : 25 }
{ "_id" : ObjectId("5e36883d9e4f06af551997c8"), "StudentAge" : 24 }
{ "_id" : ObjectId("5e3688429e4f06af551997ca"), "StudentAge" : 22 }
{ "_id" : ObjectId("5e3688439e4f06af551997cb"), "StudentAge" : 21 }

Mẹo: Đặt $sort sớm trong pipeline (sau $match) để tận dụng index. Nếu sort theo trường tính toán được (như trong bài trước), phải sort sau $project. Giới hạn bộ nhớ sort: 100MB, vượt quá sẽ lỗi trừ khi dùng allowDiskUse: true.