Mongodb đếm số bản ghi trong một bộ sưu tập java
Phương thức count() đếm số lượng tài liệu phù hợp với tiêu chí lựa chọn. Nó trả về số lượng tài liệu phù hợp với tiêu chí lựa chọn. Phải mất hai đối số đầu tiên là tiêu chí lựa chọn và đối số còn lại là tùy chọn. Show
cú pháp
Hoặc nếu chúng ta muốn đếm số lượng tài liệu trong bộ sưu tập thì sử dụng cú pháp này
Thông số
Thông số tùy chọn
Trở lại. Phương thức này trả về số lượng tài liệu phù hợp với tiêu chí lựa chọn ví dụ Trong các ví dụ sau, chúng tôi đang làm việc với
Ở đây, ta đếm tổng số tài liệu trong tập sinh thỏa mãn điều kiện đã cho, i. e. , tuổi lớn hơn 18 /** * Tìm tất cả các DBObject từ cơ sở dữ liệu bằng truy vấn này. * Lưu ý 1. nó có thể thực hiện quét toàn bộ bảng nếu truy vấn không chứa khóa chỉ mục. * Lưu ý 2. nó sẽ tìm nạp tất cả nội dung vào bộ nhớ JVM thay vì sử dụng lazy loading. * Vì vậy, hãy chắc chắn rằng bạn chỉ gọi nó ở bộ sưu tập nhỏ, chẳng hạn như dữ liệu cấu hình. * * Truy vấn @param * @param databaseName * Không gian tên @param * Bộ sưu tập @param * Các trường @param * @return */ public static final ListqueryAllFromMongo(DBObject query, String databaseName, String namespace, String collection, DBObject fields, DBObject sortFields, int . đếm (truy vấn); . tìm (truy vấn, trường). bỏ qua(numToSkip). giới hạn(giới hạn); . = null ) { danh sách = danh sách. sắp xếp(sortField); . hasNext() ) { objList. thêm vào danh sách. tiếp theo());Trong hướng dẫn này, chúng ta sẽ thấy các cách khác nhau để sử dụng Spring Data MongoDB để đếm tài liệu trong bộ sưu tập của chúng ta. Chúng tôi sẽ sử dụng tất cả các công cụ có sẵn trong MongoRepository Chúng tôi sẽ sử dụng các chú thích, phương thức truy vấn và phương thức từ CrudRepository. Ngoài ra, chúng tôi sẽ xây dựng một dịch vụ đơn giản để tổng hợp các trường hợp sử dụng khác nhau của chúng tôi 2. Thiết lập trường hợp sử dụngTrường hợp sử dụng của chúng tôi bao gồm lớp mô hình, kho lưu trữ và lớp dịch vụ. Ngoài ra, chúng tôi sẽ tạo một lớp kiểm tra để giúp chúng tôi đảm bảo mọi thứ đang hoạt động như dự kiến 2. 1. Tạo mô hìnhChúng tôi sẽ bắt đầu bằng cách tạo lớp mô hình của chúng tôi. Nó sẽ dựa trên một vài thuộc tính của một chiếc xe hơi
Chúng tôi đang bỏ qua một thuộc tính ID vì chúng tôi sẽ không cần nó trong các ví dụ của mình. Ngoài ra, chúng tôi đang thêm một hàm tạo lấy thuộc tính thương hiệu làm tham số để giúp thử nghiệm dễ dàng hơn 2. 2. Xác định kho lưu trữHãy xác định kho lưu trữ của chúng tôi mà không cần bất kỳ phương thức nào
Chúng tôi đang xem xét ID chuỗi, mặc dù chúng tôi không khai báo thuộc tính ID trong mô hình của mình. Điều này là do MongoDB tạo một ID duy nhất mặc định mà chúng ta vẫn có thể truy cập thông qua findById() nếu muốn 2. 3. Xác định lớp dịch vụDịch vụ của chúng tôi sẽ tận dụng giao diện Kho lưu trữ dữ liệu mùa xuân theo những cách khác nhau Hãy xác định nó với một tham chiếu đến kho lưu trữ của chúng tôi
Chúng ta sẽ xây dựng dựa trên lớp này trong các phần tiếp theo, bao gồm các ví dụ 2. 4. chuẩn bị kiểm traTất cả các thử nghiệm của chúng tôi sẽ chạy trên lớp dịch vụ của chúng tôi. Chúng tôi chỉ cần thiết lập một chút để không kết thúc với mã trùng lặp
Chúng tôi sẽ chạy khối này trước mỗi thử nghiệm để đơn giản hóa các kịch bản thử nghiệm của chúng tôi. Ngoài ra, chúng tôi đang xác định car1 bên ngoài init() để làm cho nó có thể truy cập được trong các thử nghiệm sau này 3. Sử dụng Kho lưu trữ CrudKhi sử dụng MongoRepository, mở rộng CrudRepository, chúng tôi có quyền truy cập vào chức năng cơ bản, bao gồm phương thức đếm () 3. 1. phương pháp đếm ()Vì vậy, trong ví dụ đếm đầu tiên của chúng tôi, không có bất kỳ phương thức nào trong kho lưu trữ của chúng tôi, chúng tôi chỉ có thể gọi nó trong dịch vụ của mình
Và chúng ta có thể kiểm tra nó
Do đó, chúng tôi đảm bảo rằng số lượng () xuất ra cùng một số với kích thước của danh sách tất cả các tài liệu trong bộ sưu tập của chúng tôi Quan trọng nhất, chúng ta phải nhớ rằng thao tác đếm sẽ tiết kiệm chi phí hơn so với việc liệt kê tất cả các tài liệu. Đây là cả về hiệu suất và giảm mã. Nó sẽ không tạo ra sự khác biệt với các bộ sưu tập nhỏ, nhưng với một bộ sưu tập lớn, chúng ta có thể gặp lỗi OutOfMemoryError. Nói tóm lại, không nên đếm tài liệu bằng cách liệt kê toàn bộ bộ sưu tập 3. 2. Lọc Sử dụng Đối tượng Ví dụCrudRepository cũng có thể hữu ích nếu chúng ta muốn đếm các tài liệu có giá trị thuộc tính cụ thể. Phương thức đếm () có phiên bản quá tải, nhận đối tượng Ví dụ
Kết quả là, điều này đơn giản hóa nhiệm vụ. Bây giờ chúng ta chỉ cần điền vào một đối tượng các thuộc tính mà chúng ta muốn lọc và Spring sẽ làm phần còn lại. Hãy bao gồm nó trong các thử nghiệm của chúng tôi
4. Sử dụng Chú thích @QueryVí dụ tiếp theo của chúng ta sẽ dựa trên chú thích @Query ________số 8Chúng ta phải chỉ định thuộc tính giá trị, nếu không Spring sẽ thử tạo truy vấn từ tên phương thức của chúng ta. Tuy nhiên, vì chúng tôi muốn đếm tất cả các tài liệu, chúng tôi chỉ cần chỉ định một truy vấn trống Sau đó, chúng tôi xác định rằng kết quả của truy vấn này phải là một phép chiếu đếm bằng cách đặt thuộc tính đếm thành true Hãy kiểm tra nó
4. 1. Lọc trên một tài sảnChúng tôi có thể mở rộng ví dụ của mình, lọc theo thương hiệu. Hãy thêm một phương thức mới vào kho lưu trữ của chúng tôi 0Trong giá trị truy vấn của chúng tôi, chúng tôi chỉ định truy vấn kiểu MongoDB đầy đủ của mình. Trình giữ chỗ “?0” đại diện cho tham số đầu tiên của phương thức của chúng tôi, đây sẽ là giá trị tham số truy vấn của chúng tôi Các truy vấn MongoDB có cấu trúc JSON nơi chúng tôi chỉ định tên trường dọc theo các giá trị mà chúng tôi muốn lọc theo. Vì vậy, khi chúng ta gọi countBrand(“A”), truy vấn chuyển thành {brand. "MỘT"}. Điều này có nghĩa là chúng tôi sẽ lọc bộ sưu tập của mình theo các mặt hàng có thuộc tính thương hiệu có giá trị là “A” 5. Viết một phương thức truy vấn có nguồn gốcPhương thức truy vấn dẫn xuất là bất kỳ phương thức nào bên trong kho lưu trữ của chúng tôi không bao gồm chú thích @Query có giá trị. Các phương thức này được Spring phân tích cú pháp theo tên nên chúng ta không phải viết truy vấn Vì chúng ta đã có một phương thức count() trong CrudRepository của mình, hãy tạo một ví dụ đếm theo một thương hiệu cụ thể 1Phương pháp này sẽ đếm tất cả các tài liệu có thuộc tính thương hiệu khớp với giá trị tham số Bây giờ, hãy thêm nó vào dịch vụ của chúng tôi 2Sau đó, chúng tôi đảm bảo phương thức của mình hoạt động chính xác bằng cách so sánh nó với thao tác đếm luồng đã lọc 3Điều này hoạt động tốt khi chúng ta chỉ phải viết một vài truy vấn khác nhau. Tuy nhiên, nó có thể trở nên khó duy trì nếu chúng ta cần quá nhiều truy vấn đếm khác nhau 6. Sử dụng truy vấn đếm động với tiêu chíKhi chúng ta cần thứ gì đó mạnh mẽ hơn một chút, chúng ta có thể sử dụng Tiêu chí với đối tượng Truy vấn Tuy nhiên, để chạy Truy vấn, chúng tôi cần MongoTemplate. Nó được khởi tạo trong khi khởi động và có sẵn trong SimpleMongoRepository trong trường mongoOperations Một cách để truy cập nó là mở rộng SimpleMongoRepository và tạo triển khai tùy chỉnh thay vì chỉ mở rộng MongoRepository. Nhưng, có một cách đơn giản hơn. Chúng tôi có thể đưa nó vào dịch vụ của mình 4Sau đó, chúng ta có thể tạo phương thức đếm mới của mình, chuyển Truy vấn tới phương thức đếm () trong MongoTemplate 5Cách tiếp cận này rất hữu ích khi chúng ta cần tạo các truy vấn động. Chúng tôi có toàn quyền kiểm soát cách tạo phép chiếu 6. 1. Lọc Sử dụng Đối tượng Ví dụĐối tượng Criteria cũng cho phép chúng ta truyền đối tượng Ví dụ 6Điều này làm cho việc lọc theo thuộc tính dễ dàng hơn, trong khi vẫn cho phép các phần động 7. Phần kết luậnTrong bài viết này, chúng ta đã thấy các cách khác nhau để sử dụng phép chiếu đếm trong Spring Data MongoDB với các phương thức kho lưu trữ Chúng tôi đã sử dụng các phương pháp có sẵn và cũng tạo ra những phương pháp mới bằng các cách tiếp cận khác nhau. Hơn nữa, chúng tôi đã tạo các bài kiểm tra bằng cách so sánh các phương pháp đếm của chúng tôi với việc liệt kê tất cả các đối tượng trong bộ sưu tập của chúng tôi. Tương tự như vậy, chúng tôi đã tìm hiểu lý do tại sao không nên đếm các tài liệu như vậy Làm cách nào để đếm số lượng tài liệu trong bộ sưu tập MongoDB trong Java?Đếm tài liệu . CountDocuments() trả về số lượng tài liệu trong bộ sưu tập khớp với một truy vấn đã chỉ định. . ước tínhDocumentCount() trả về ước tính số lượng tài liệu trong bộ sưu tập dựa trên siêu dữ liệu của bộ sưu tập Làm cách nào để kiểm tra kích thước bộ sưu tập trong MongoDB?totalSize() được sử dụng để báo cáo tổng kích thước của một bộ sưu tập, bao gồm kích thước của tất cả các tài liệu và tất cả các chỉ mục trên một bộ sưu tập. trả lại. Tổng kích thước tính bằng byte của dữ liệu trong bộ sưu tập cộng với kích thước của mọi chỉ mục trên bộ sưu tập.
Làm cách nào để đếm các giá trị riêng biệt trong MongoDB?Để đếm các giá trị duy nhất, hãy sử dụng "distinct()" thay vì "find()" và "độ dài" thay vì "count()". The first argument for "distinct" is the field for which to aggregate distinct values, the second is the conditional statement that specifies which rows to select.
Làm cách nào để kiểm tra bản ghi trong MongoDB?Trong Mongo DB, có tổng cộng sáu phương thức để truy xuất các bản ghi cụ thể. . tìm thấy() findAndModify() tìm một() findOneAndDelete() findOneAndReplace() findOneAndUpdate() |