Aggregation Pipeline ใน MongoDB รองรับ Stage $sort สำหรับการเรียงลำดับผลลัพธ์ เนื้อหานี้สาธิตการใช้ aggregate() พร้อม $sort เรียง StudentAge จากมากไปน้อย (Descending)
ตัวอย่างข้อมูลทดสอบ
> 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") }
แสดงข้อมูลเดิม (ไม่ได้เรียง)
> db.demo164.find();
{
"_id" : ObjectId("5e36883d9e4f06af551997c8"),
"StudentAge" : 24
}
{
"_id" : ObjectId("5e3688409e4f06af551997c9"),
"StudentAge" : 25
}
{
"_id" : ObjectId("5e3688429e4f06af551997ca"),
"StudentAge" : 22
}
{
"_id" : ObjectId("5e3688439e4f06af551997cb"),
"StudentAge" : 21
}
Aggregation Query เรียงอายุมากไปน้อย
> db.demo164.aggregate([{ $sort: { StudentAge: -1 } }]);
ผลลัพธ์ (เรียง Descending)
{
"_id" : ObjectId("5e3688409e4f06af551997c9"),
"StudentAge" : 25
}
{
"_id" : ObjectId("5e36883d9e4f06af551997c8"),
"StudentAge" : 24
}
{
"_id" : ObjectId("5e3688429e4f06af551997ca"),
"StudentAge" : 22
}
{
"_id" : ObjectId("5e3688439e4f06af551997cb"),
"StudentAge" : 21
}
คำอธิบายและรายละเอียด
$sort: { field: 1 }= Ascending (น้อยไปมาก),-1= Descending (มากไปน้อย)- เรียงหลาย Field ได้:
{ $sort: { Age: -1, Name: 1 } }(Age มากไปน้อย, Name ก่อนไปหลัง) - Memory Limit: $sort จำกัด 100MB RAM, เกินจะ Error (ยกเว้นใช้
allowDiskUse: true) - Performance: วาง
$sortหลัง$match/$projectเพื่อลดข้อมูลก่อน Sort - ใช้ Index ได้หาก $sort เป็น Stage แรก และ Pattern Match Index (หรือ $match + $sort ใช้ Compound Index)
- MongoDB Shell:
find().sort({StudentAge: -1})ใช้สำหรับ Query ธรรมดา (ไม่ใช่ Aggregation)