Để giới hạn các bản ghi trong MongoDB, bạn cần sử dụng phương thức limit[]. Phương thức chấp nhận một đối số kiểu số, là số lượng tài liệu mà bạn muốn hiển thị
cú pháp
Cú pháp cơ bản của phương thức limit[] như sau -
>db.COLLECTION_NAME.find[].limit[NUMBER]
Ví dụ
Hãy xem xét bộ sưu tập myycol có dữ liệu sau
{_id : ObjectId["507f191e810c19729de860e1"], title: "MongoDB Overview"}, {_id : ObjectId["507f191e810c19729de860e2"], title: "NoSQL Overview"}, {_id : ObjectId["507f191e810c19729de860e3"], title: "Tutorials Point Overview"}
Ví dụ sau sẽ chỉ hiển thị hai tài liệu trong khi truy vấn tài liệu
>db.mycol.find[{},{"title":1,_id:0}].limit[2] {"title":"MongoDB Overview"} {"title":"NoSQL Overview"} >
Nếu bạn không chỉ định đối số số trong phương thức limit[] thì nó sẽ hiển thị tất cả các tài liệu từ bộ sưu tập
Phương thức bỏ qua MongoDB[]
Ngoài phương thức limit[], còn có một phương thức khác là skip[] cũng chấp nhận đối số kiểu số và được sử dụng để bỏ qua số lượng tài liệu
Đối tượng con trỏ của MongoDB có một phương thức gọi là skip
, theo tài liệu và định nghĩa, điều khiển nơi MongoDB bắt đầu trả về kết quả. Do đó, kết hợp với giới hạn chức năng, người ta có thể dễ dàng có kết quả được phân trang
Tôi đã viết một bài đăng trên blog về cách bạn có thể phân trang nhanh và hiệu quả trong MongoDB
Nhưng trong khi xem qua tài liệu về bỏ qua, có một điều thú vị cần lưu ý. Có một cảnh báo nhỏ trong tài liệu MongoDB, nói rằng
Phương pháp
cursor.skip[]
thường tốn kém vì nó yêu cầu máy chủ đi lại từ đầu bộ sưu tập hoặc chỉ mục để lấy vị trí bù hoặc bỏ qua trước khi bắt đầu trả về kết quả. Là phần bù [e. g.pageNumber
ở trên] tăng lên,cursor.skip[]
sẽ trở nên chậm hơn và sử dụng nhiều CPU hơn. Với các bộ sưu tập lớn hơn,cursor.skip[]
có thể bị ràng buộc IO
Nói tóm lại, MongoDB phải lặp lại các tài liệu để bỏ qua chúng. Do đó, khi bộ sưu tập hoặc tập kết quả rất lớn và bạn cần bỏ qua các tài liệu để phân trang, lệnh gọi tới
{_id : ObjectId["507f191e810c19729de860e1"], title: "MongoDB Overview"}, {_id : ObjectId["507f191e810c19729de860e2"], title: "NoSQL Overview"}, {_id : ObjectId["507f191e810c19729de860e3"], title: "Tutorials Point Overview"}1 sẽ rất tốn kém. Khi xem qua mã nguồn của
skip
, tôi phát hiện ra rằng nó không sử dụng bất kỳ chỉ mục nào và do đó sẽ chậm hơn khi tập kết quả tăng kích thướcĐiều này cũng ngụ ý rằng nếu bạn sử dụng skip
thì “tốc độ bỏ qua” sẽ không cải thiện ngay cả khi bạn lập chỉ mục trường
Nhưng nếu kích thước của tập kết quả nhỏ thì sao? . Nhưng họ chưa… tại sao?
Bởi vì nó rất hiệu quả và nhanh chóng cho tập kết quả nhỏ hơn. Tôi đã tận dụng cơ hội này để đánh giá chuẩn và so sánh hai cách tiếp cận để phân trang và ở đó tôi phát hiện ra rằng phân trang dựa trên bỏ qua và giới hạn hoạt động tốt cho các tập kết quả nhỏ hơn
Tóm lại, bỏ qua không tệ như người ta nghĩ. Nhưng bạn phải hiểu rõ trường hợp sử dụng của mình để đưa ra quyết định sáng suốt
Trong MongoDB, phương thức limit[] giới hạn số lượng bản ghi hoặc tài liệu mà bạn muốn. Về cơ bản, nó xác định giới hạn tối đa của hồ sơ/tài liệu mà bạn muốn. Hay nói cách khác, phương thức này sử dụng trên con trỏ để chỉ định số lượng tài liệu/bản ghi tối đa mà con trỏ sẽ trả về. Chúng ta có thể sử dụng phương thức này sau phương thức find[] và find[] sẽ cung cấp cho bạn tất cả các bản ghi hoặc tài liệu trong bộ sưu tập. Bạn cũng có thể sử dụng một số điều kiện bên trong tìm kiếm để cung cấp cho bạn kết quả mà bạn muốn
- Trong phương thức này, chúng tôi chỉ truyền các giá trị số
- Phương pháp này không được xác định cho các giá trị nhỏ hơn -231 và lớn hơn 231
- Vượt qua 0 trong phương pháp này [giới hạn [0]] tương đương với không có giới hạn
cú pháp
con trỏ. giới hạn[]
Hoặc
db.collectionName.find[].limit[]
ví dụ
Trong các ví dụ sau, chúng tôi đang làm việc với
cơ sở dữ liệu. chuyên viên máy tính
bộ sưu tập. gfg
Tài liệu. Tám tài liệu chứa nội dung
Giới hạn hai tài liệu
db.gfg.find[].limit[2]
Ở đây, chúng tôi chỉ muốn hai tài liệu đầu tiên trong kết quả. Vì vậy, chúng tôi vượt qua 2 trong phương pháp giới hạn
Chỉ giới hạn hai tài liệu phù hợp với điều kiện nhất định
db.gfg.find[{"content":/c/i}].limit[2]
Ở đây, chúng tôi chỉ muốn hai tài liệu thỏa mãn điều kiện đã cho, tôi. e. , {"Nội dung". /c/i}] trong phương thức find[]. Ở đây, nội dung là chính, chúng tôi sẽ kiểm tra xem nó có chứa ký tự 'c' trong chuỗi hay không. /c/ biểu thị rằng chúng tôi đang tìm kiếm các chuỗi chứa ký tự 'c' này và ở cuối /c/i, i biểu thị rằng nó không phân biệt chữ hoa chữ thường
Chỉ giới hạn ba tài liệu phù hợp với điều kiện nhất định
db.gfg.find[{"content":/c/i}].limit[3]
Ở đây, chúng tôi chỉ muốn ba tài liệu thỏa mãn điều kiện đã cho, tôi. e. , {"Nội dung". /c/i}] trong phương thức find[]. Ở đây, nội dung là chính, chúng tôi sẽ kiểm tra xem nó có chứa ký tự 'c' trong chuỗi hay không. /c/ biểu thị rằng chúng tôi đang tìm kiếm các chuỗi chứa ký tự 'c' này và ở cuối /c/i, i biểu thị rằng nó không phân biệt chữ hoa chữ thường