sort, limit, skip
find-ийн үр дүнг эрэмбэлэх, тоог хязгаарлах, алгасах зорилгоор .sort(), .limit(), .skip() методуудыг ашигладаг. Эдгээрийг дараалан хэлхэж (chain) бичиж болно.
.sort() — эрэмбэлэх
// Хэлбэр:
db.collection.find().sort({ талбар: 1 эсвэл -1 })
1— өсөх дараалал (A→Z, 0→9)-1— буурах дараалал (Z→A, 9→0)
// Нас-аар өсөх дараалалаар
db.users.find().sort({ age: 1 });
// Нас-аар буурах дараалалаар
db.users.find().sort({ age: -1 });
// Нэрээр цагаан толгойн дараалалаар
db.users.find().sort({ username: 1 });
Олон талбараар эрэмбэлэх
// Эхлээд city-гээр өсөх, дараа нь age-аар буурах
db.users.find().sort({ city: 1, age: -1 });
MongoDB зааж өгсөн дараалал дагуу эрэмбэлнэ — эхний талбараар тэнцүү байвал хоёр дахь талбарыг харна.
.limit() — тоо хязгаарлах
// Зөвхөн эхний 5 document авах
db.users.find().limit(5);
// Хамгийн өндөр score-той 3 оюутан
db.students.find().sort({ score: -1 }).limit(3);
.skip() — алгасах
// Эхний 10-ийг алгасаад дараагийнхийг авах
db.users.find().skip(10);
.skip() дангаараа ховор хэрэглэгддэг — pagination-д .limit()-тэй хосолдог.
Pagination загвар
Хуудаслалт (pagination) хийхэд .skip() ба .limit()-ийг хамт ашиглана.
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 илүү тохиромжтой:
// Сүүлийн харсан document-ийн _id-г хадгалаад дараагийн хуудсыг авах
db.posts
.find({ _id: { $gt: lastSeenId } })
.sort({ _id: 1 })
.limit(10);
Методуудыг хэлхэх (Chaining)
.sort(), .skip(), .limit()-ийг дурын дарааллаар бичсэн ч MongoDB үргэлж дараах дарааллаар гүйцэтгэнэ:
sort— эрэмбэлэхskip— алгасахlimit— хязгаарлах
// Бичих дараалал хамаагүй — үр дүн адилхан
db.products
.find({ category: "electronics" })
.sort({ price: -1 })
.skip(20)
.limit(10);
Жишээ: Блог нийтлэлийн жагсаалт
// Хамгийн сүүлийн 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-ийн хурдыг хэрхэн нэмэгдүүлэх талаар үзнэ.