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

สร้างดัชนี จัดเรียง และแบ่งหน้า (Pagination) ด้วยฟิลด์กำหนดเองใน MongoDB

สร้าง Compound Index บนฟิลด์ที่ต้องการ sort แล้วใช้ sort(), limit(), skip() สำหรับ Pagination

สร้างดัชนีและข้อมูลทดสอบ

> db.demo373.createIndex({"Name":1,"CountryName":1});
> db.demo373.insertOne({"Name":"Chris","Age":22,"CountryName":"US"});
> db.demo373.insertOne({"Name":"David","Age":21,"CountryName":"AUS"});
> db.demo373.insertOne({"Name":"Bob","Age":23,"CountryName":"UK"});
> db.demo373.insertOne({"Name":"John","Age":21,"CountryName":"US"});
> db.demo373.insertOne({"Name":"Carol","Age":23,"CountryName":"AUS"});

แสดงข้อมูลทั้งหมด

> db.demo373.find();
{
    "_id" : ObjectId("5e59ffde2ae06a1609a00aff"), "Name" : "Chris", "Age" : 22, "CountryName" : "US"
}
{
    "_id" : ObjectId("5e59ffe82ae06a1609a00b00"), "Name" : "David", "Age" : 21, "CountryName" : "AUS"
}
{
    "_id" : ObjectId("5e59fff42ae06a1609a00b01"), "Name" : "Bob", "Age" : 23, "CountryName" : "UK"
}
{
    "_id" : ObjectId("5e59ffff2ae06a1609a00b02"), "Name" : "John", "Age" : 21, "CountryName" : "US"
}
{
    "_id" : ObjectId("5e5a00082ae06a1609a00b03"), "Name" : "Carol", "Age" : 23, "CountryName" : "AUS"
}

คิวรี่: จัดเรียง Name ASC, Age ASC แล้วข้าม 2 รายการ แสดง 4 รายการ (หน้าที่ 2)

> db.demo373.find().sort({"Name":1, "Age":1}).limit(4).skip(2);

ผลลัพธ์

{
    "_id" : ObjectId("5e59ffde2ae06a1609a00aff"), "Name" : "Chris", "Age" : 22, "CountryName" : "US"
}
{
    "_id" : ObjectId("5e59ffe82ae06a1609a00b00"), "Name" : "David", "Age" : 21, "CountryName" : "AUS"
}
{
    "_id" : ObjectId("5e59ffff2ae06a1609a00b02"), "Name" : "John", "Age" : 21, "CountryName" : "US"
}

แนวทางปฏิบัติที่ดี:

  • สร้างดัชนีตรงกับลำดับ sort (ESR Rule: Equality, Sort, Range)
  • หลีกเลี่ยง skip มากเกินไป (performance ลดลง) - ใช้ Range-based pagination แทน
  • ใช้ explain() ตรวจสอบว่าใช้ index จริง