MongoDB / sort, limit, skip

sort, limit, skip

find-ийн үр дүнг эрэмбэлэх, тоог хязгаарлах, алгасах зорилгоор .sort(), .limit(), .skip() методуудыг ашигладаг. Эдгээрийг дараалан хэлхэж (chain) бичиж болно.

.sort() — эрэмбэлэх

javascript
// Хэлбэр:
db.collection.find().sort({ талбар: 1 эсвэл -1 })
  • 1 — өсөх дараалал (A→Z, 0→9)
  • -1 — буурах дараалал (Z→A, 9→0)
javascript
// Нас-аар өсөх дараалалаар
db.users.find().sort({ age: 1 });

// Нас-аар буурах дараалалаар
db.users.find().sort({ age: -1 });

// Нэрээр цагаан толгойн дараалалаар
db.users.find().sort({ username: 1 });

Олон талбараар эрэмбэлэх

javascript
// Эхлээд city-гээр өсөх, дараа нь age-аар буурах
db.users.find().sort({ city: 1, age: -1 });

MongoDB зааж өгсөн дараалал дагуу эрэмбэлнэ — эхний талбараар тэнцүү байвал хоёр дахь талбарыг харна.

.limit() — тоо хязгаарлах

javascript
// Зөвхөн эхний 5 document авах
db.users.find().limit(5);

// Хамгийн өндөр score-той 3 оюутан
db.students.find().sort({ score: -1 }).limit(3);

.skip() — алгасах

javascript
// Эхний 10-ийг алгасаад дараагийнхийг авах
db.users.find().skip(10);

.skip() дангаараа ховор хэрэглэгддэг — pagination-д .limit()-тэй хосолдог.

Pagination загвар

Хуудаслалт (pagination) хийхэд .skip() ба .limit()-ийг хамт ашиглана.

javascript
const pageSize = 10; // Хуудас бүрт харуулах тоо
const page = 3; // Одоогийн хуудасны дугаар (1-ээс эхлэнэ)

db.posts
  .find()
  .sort({ createdAt: -1 })
  .skip((page - 1) * pageSize) // (3-1) * 10 = 20 → 20 document алгасана
  .limit(pageSize);

| Хуудас | skip | limit | | ------ | ---------- | ----- | | 1 | 0 | 10 | | 2 | 10 | 10 | | 3 | 20 | 10 | | n | (n-1) × 10 | 10 |

Skip-ийн хязгаарлалт

.skip() нь их тоотой үед удаашрах тал байдаг — MongoDB алгасах document бүрийг уншдаг. Их хэмжээний өгөгдөлд _id буюу createdAt-д суурилсан cursor-based pagination илүү тохиромжтой:

javascript
// Сүүлийн харсан document-ийн _id-г хадгалаад дараагийн хуудсыг авах
db.posts
  .find({ _id: { $gt: lastSeenId } })
  .sort({ _id: 1 })
  .limit(10);

Методуудыг хэлхэх (Chaining)

.sort(), .skip(), .limit()-ийг дурын дарааллаар бичсэн ч MongoDB үргэлж дараах дарааллаар гүйцэтгэнэ:

  1. sort — эрэмбэлэх
  2. skip — алгасах
  3. limit — хязгаарлах
javascript
// Бичих дараалал хамаагүй — үр дүн адилхан
db.products
  .find({ category: "electronics" })
  .sort({ price: -1 })
  .skip(20)
  .limit(10);

Жишээ: Блог нийтлэлийн жагсаалт

javascript
// Хамгийн сүүлийн 5 нийтлэл
db.posts
  .find({ published: true }, { title: 1, author: 1, createdAt: 1, _id: 0 })
  .sort({ createdAt: -1 })
  .limit(5);

// Үр дүн:
// { title: "MongoDB sort ашиглах нь", author: "bold", createdAt: ... }
// { title: "Node.js гарын авлага",    author: "dorj",  createdAt: ... }
// ...

Дараагийн хичээлд:

Index үүсгэн query-ийн хурдыг хэрхэн нэмэгдүүлэх талаар үзнэ.