Phân trang trong MongoDB (skip(), limit() paging trong MongoDB)

This entry is part 24 of 24 in the series MongoDB

Phân trang trong MongoDB (skip(), limit() paging trong MongoDB)

Phân trang trong MongoDB

Để tìm kiếm, truy vấn dữ liệu trong MongoDB chúng ta có 2 method là:

  • find(query, projection): trả về tất cả kết quả thỏa mãn với query
  • findOne(query, projection): trả về 1 kết quả đầu tiên thỏa mãn query

Để xác định số lượng kết quả trả về và số thứ tự kết quả được lấy ta sử dụng method limit()skip()

Ví dụ trong collection player mình có những document sau:

 {'_id':'1', 'name':'neymar', 'country':'brazil', 'age':25},
{'_id':'2', 'name':'hazard', 'country':'belgium', 'age':25},
{'_id':'3', 'name':'mbappe', 'country':'france', 'age':18},
{'_id':'4', 'name':'modric', 'country':'croatia', 'age':30},
{'_id':'5', 'name':'ronaldo', 'country':'portugal', 'age':33},
{'_id':'6', 'name':'messi', 'country':'argentina', 'age':31},
{'_id':'7', 'name':'icardi', 'country':'argentina', 'age':25},
{'_id':'8', 'name':'griezmann', 'country':'france', 'age':28}

limit()

Method limit() được dùng sau method find() để xác định tối đa số kết quả trả về:

Ví dụ mình muốn lấy 2 document của collection player:

db.player.find().limit(2)

Phân trang trong MongoDB (skip(), limit() paging trong MongoDB)

Nếu tham số trong method limit() lớn hơn số lượng kết quả trả về thì nó sẽ trả về tất cả các kết quả, ví dụ kết quả truy vấn có 8 document nhưng lại để là limit(10) thì số lượng kết quả trả về sẽ là 8

Các kết quả được lấy theo thứ tự sort (mặc định sort theo _id)

skip()

Method skip() được dùng để xác định sẽ lấy document trong kết quả ở vị trí thứ bao nhiêu bằng cách bỏ qua các document trước đó.

Ví dụ mình muốn lấy 2 document của collection player từ vị trí thứ 3:

db.player.find().limit(2).skip(2)

Phân trang trong MongoDB (skip(), limit() paging trong MongoDB)

Để phân trang trong MongoDB ta sẽ sử dụng kết hợp limit()skip(), ví dụ mình chia kết quả thành các trang (page), mỗi trang có 5 kết quả.

Bây giờ muốn lấy kết quả trang thứ n (n bắt đầu từ 0) thì câu lệnh sẽ là:

db.player.find().limit(5).skip(5*n)

Ví dụ, với điều kiện như trên, lấy kết quả trong page 1:

Phân trang trong MongoDB (skip(), limit() paging trong MongoDB)

Phân trang trong MongoDB (skip(), limit() paging trong MongoDB) stackjava.com

Okay, Done!

References:

https://docs.mongodb.com/manual/reference/method/db.collection.find/

Series Navigation<< Replication, Replica Set trong MongoDB là gì?
stackjava.com