Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

MongoDB ใช้ Aggregate $sort เพื่อเรียงลำดับข้อมูล

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)