Trong hệ sinh thái mùa xuân, thật dễ dàng để định cấu hình, bật hoặc tắt các tính năng khác nhau thông qua các thuộc tính bên ngoài. Mẫu Mongo cũng không ngoại lệ và thật đơn giản khi thêm một lớp lót vào ứng dụng. tệp thuộc tính
logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
Tuy nhiên, nếu bạn đang sử dụng phiên bản phản ứng của Mẫu Mongo, cấu hình sẽ hơi khác một chút
logging.level.org.springframework.data.mongodb.core.ReactiveMongoTemplate=DEBUG
Ngoài ra, vì các kho lưu trữ Dữ liệu Chuỗi được xây dựng trên Mẫu Mongo, nên tất cả các truy vấn được tạo bởi các kho lưu trữ sẽ được ghi lại tự động sau khi tính năng ghi nhật ký được bật
Nếu chúng tôi lấy kho lưu trữ và thực thể từ bài đăng trên blog trước đó và chạy đoạn mã sau
@Bean
CommandLineRunner runner[final ProductsRepository productsRepository]{
return args -> {
productsRepository.deleteAll[];
productsRepository.insert[new Product["A new product"]];
productsRepository.findAll[];
productsRepository.count[];
};
}
Đầu ra trong nhật ký
2022-05-17 20:15:03.115 DEBUG 36105 --- [ main] o.s.data.mongodb.core.MongoTemplate : Remove using query: {} in collection: product.2022-05-17 20:15:03.135 INFO 36105 --- [ main] org.mongodb.driver.connection : Opened connection [connectionId{localValue:3, serverValue:12}] to localhost:270172022-05-17 20:15:03.183 DEBUG 36105 --- [ main] o.s.data.mongodb.core.MongoTemplate : Inserting Document containing fields: [name, _class] in collection: product2022-05-17 20:15:03.210 DEBUG 36105 --- [ main] o.s.data.mongodb.core.MongoTemplate : find using query: {} fields: Document{{}} for class: class com.sabljakovic.mongospringdemo.Product in collection: product2022-05-17 20:15:03.235 DEBUG 36105 --- [ main] o.s.data.mongodb.core.MongoTemplate : Executing count: {} in collection: product
Như chúng ta có thể thấy, Trình ghi mẫu Mongo không ghi lại các truy vấn thô mà chúng ta thực hiện và thực hiện trực tiếp trong trình bao mongo. Tuy nhiên, điều này có thể hữu ích để gỡ lỗi trong một số tình huống nhất định
Trang này sẽ xem qua các ví dụ về chú thích của Spring Data MongoDB@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }3. Chú thích
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }3 khai báo các truy vấn tìm kiếm trực tiếp trên các phương thức kho lưu trữ. Nó cũng cho phép sử dụng ký hiệu giữ chỗ của ?0, ?1, v.v. Tìm các phần tử của chú thích
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }3
giá trị. Lấy truy vấn dưới dạng chuỗi JSON
loại. Xác định thứ tự sắp xếp mặc định
lĩnh vực. Xác định các trường sẽ được trả về bởi truy vấn
tồn tại. Giá trị Boolean để quyết định xem có nên thực hiện truy vấn dưới dạng phép chiếu tồn tại hay không
xóa bỏ. Giá trị boolean để quyết định xem truy vấn có nên xóa các tài liệu phù hợp hay không
đếm. Giá trị boolean để quyết định xem có nên thực hiện truy vấn dưới dạng phép chiếu đếm hay không
đối chiếu. Xác định đối chiếu để áp dụng khi thực hiện truy vấn
Ở đây trên trang này, chúng ta sẽ thảo luận chi tiết về việc sử dụng các yếu tố của
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }3 với các ví dụ
1. Công nghệ được sử dụng
Tìm các công nghệ đang được sử dụng trong ví dụ của chúng tôi1. java11
2. mùa xuân 5. 1. 9. PHÓNG THÍCH
3. Dữ liệu mùa xuân 2. 1. 10. PHÓNG THÍCH
4. Khởi động mùa xuân 2. 1. 7. PHÓNG THÍCH
5. Máy chủ MongoDB 4. 0
6. maven 3. 5. 2
2. giá trị
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }7 cần một truy vấn ở định dạng JSON. Tìm một phương thức được chú thích bằng
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }3 sẽ lấy dữ liệu cho id đã cho
@Component public interface BookRepository extends MongoRepository { @Query[value = "{id : ?0}"] Book findBookById[int id]; }
@Component public interface BookRepository extends MongoRepository { @Query["{id : ?0}"] Book findBookById[int id]; }Tìm thêm một ví dụ
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }Truy vấn trên sẽ tìm nạp dữ liệu dưới dạng Java
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }9 để khớp 'nhà văn' và 'danh mục'. Trong khi tìm nạp dữ liệu từ
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }9, chúng tôi cần đóng nó. Để thuận tiện, chúng ta có thể sử dụng Java Try-With-Resources sẽ tự động đóng
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }9 sau khi sử dụng
try [Stream stream = repository.findBooksByWriterAndCategory["Krishna", "Frontend"]] { stream.forEach[book -> System.out.println[book]]; }
2. 1 Sử dụng gt [>] và lt [] and lt [] we need to use try [Stream stream = repository.findBooksByWriterAndCategory["Krishna", "Frontend"]] {
stream.forEach[book -> System.out.println[book]];
}
3 and for lt [ System.out.println[book]];
} 4.
Tìm ví dụ cho try [Stream stream = repository.findBooksByWriterAndCategory["Krishna", "Frontend"]] {
stream.forEach[book -> System.out.println[book]];
}
3
@Query["{noOfPages : {$gt: ?0}}"] Stream findBooksGtThanNoOfPages[int noOfPages];Phương thức trên sẽ trả về dữ liệu có
try [Stream stream = repository.findBooksByWriterAndCategory["Krishna", "Frontend"]] { stream.forEach[book -> System.out.println[book]]; }6 lớn hơn giá trị đã cho
try [Stream stream = repository.findBooksByWriterAndCategory["Krishna", "Frontend"]] { stream.forEach[book -> System.out.println[book]]; }6
Tìm ví dụ cho
try [Stream stream = repository.findBooksByWriterAndCategory["Krishna", "Frontend"]] { stream.forEach[book -> System.out.println[book]]; }4
@Query["{writer : ?0, noOfPages : {$lt: ?1}}"] Stream findBooksByWriterAndLtThanNoOfPages[String writer, int noOfPages];Phương thức trên sẽ trả về dữ liệu có thuộc tính
try [Stream stream = repository.findBooksByWriterAndCategory["Krishna", "Frontend"]] { stream.forEach[book -> System.out.println[book]]; }9 khớp với giá trị
try [Stream stream = repository.findBooksByWriterAndCategory["Krishna", "Frontend"]] { stream.forEach[book -> System.out.println[book]]; }9 đã cho và
try [Stream stream = repository.findBooksByWriterAndCategory["Krishna", "Frontend"]] { stream.forEach[book -> System.out.println[book]]; }6 nhỏ hơn giá trị
try [Stream stream = repository.findBooksByWriterAndCategory["Krishna", "Frontend"]] { stream.forEach[book -> System.out.println[book]]; }6 đã cho
2. 2 nhà điều hành. VÀ, HOẶC
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }3 trong MongoDB sử dụng
@Query["{noOfPages : {$gt: ?0}}"] Stream findBooksGtThanNoOfPages[int noOfPages];4 cho toán tử OR và nó sử dụng
@Query["{noOfPages : {$gt: ?0}}"] Stream findBooksGtThanNoOfPages[int noOfPages];5 cho toán tử AND. Cú pháp của
@Query["{noOfPages : {$gt: ?0}}"] Stream findBooksGtThanNoOfPages[int noOfPages];4 như sau. Kết quả sẽ được điền trước bằng cách sử dụng điều kiện {} đầu tiên và nếu không có dữ liệu thì
@Query["{noOfPages : {$gt: ?0}}"] Stream findBooksGtThanNoOfPages[int noOfPages];4 sẽ sử dụng điều kiện {} thứ hai
Tìm ví dụ cho toán tử
@Query["{noOfPages : {$gt: ?0}}"] Stream findBooksGtThanNoOfPages[int noOfPages];4
@Query["{$or : [{writer: ?0}, {category : ?1}]}"] Stream findBooksByWriterOrCategory[String writer, String category];Tìm ví dụ cho toán tử
@Query["{noOfPages : {$gt: ?0}}"] Stream findBooksGtThanNoOfPages[int noOfPages];5
@Query["{$and : [{$or : [{noOfPages: {$gt: 275}}, {noOfPages : {$lt: 200}}]}, {$or : [{id: {$gt: 103}}, {id : {$lt: 102}}]}]}"] Stream findBestBooks[];
3. lĩnh vực
Phần tử@Query["{writer : ?0, noOfPages : {$lt: ?1}}"] Stream findBooksByWriterAndLtThanNoOfPages[String writer, int noOfPages];0 của
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }3 xác định các trường sẽ được trả về cho truy vấn đã cho. Đối tượng miền sẽ chỉ giữ giá trị trong các trường được chỉ định và trường
@Query["{writer : ?0, noOfPages : {$lt: ?1}}"] Stream findBooksByWriterAndLtThanNoOfPages[String writer, int noOfPages];2 và các trường còn lại sẽ là null. Chúng ta cần đặt giá trị trường bằng 1 để điền giá trị của nó. Các trường của tên miền đã được đặt thành 0 hoặc không được chỉ định sẽ có giá trị null. Tìm ví dụ
@Query[value = "{writer : ?0, category : ?1}", fields = "{ 'title' : 1, 'noOfPages' : 1, 'writer' : 1}"] Stream findBooksWithCertainFields[String writer, String category];
4. đếm
Phần tử@Query["{writer : ?0, noOfPages : {$lt: ?1}}"] Stream findBooksByWriterAndLtThanNoOfPages[String writer, int noOfPages];3 của
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }3 quyết định xem truy vấn được xác định có nên được thực thi dưới dạng phép chiếu đếm hay không.
@Query["{writer : ?0, noOfPages : {$lt: ?1}}"] Stream findBooksByWriterAndLtThanNoOfPages[String writer, int noOfPages];3 được gán làm giá trị Boolean. Khi chúng tôi chỉ định
@Query["{writer : ?0, noOfPages : {$lt: ?1}}"] Stream findBooksByWriterAndLtThanNoOfPages[String writer, int noOfPages];6, phương thức trả về số lượng kết quả truy vấn. Tìm ví dụ
@Query[value = "{category : ?0}", count = true] Integer findBookCountByCategory[String category];
5. tồn tại
Phần tử@Query["{writer : ?0, noOfPages : {$lt: ?1}}"] Stream findBooksByWriterAndLtThanNoOfPages[String writer, int noOfPages];7 của
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }3 quyết định liệu truy vấn được xác định có nên được thực thi dưới dạng phép chiếu tồn tại hay không.
@Query["{writer : ?0, noOfPages : {$lt: ?1}}"] Stream findBooksByWriterAndLtThanNoOfPages[String writer, int noOfPages];7 được gán làm giá trị Boolean. Khi chúng ta chỉ định
@Query["{writer : ?0, noOfPages : {$lt: ?1}}"] Stream findBooksByWriterAndLtThanNoOfPages[String writer, int noOfPages];6, phương thức trả về giá trị true/false. Nếu các phương thức trả về false, điều đó có nghĩa là số lượng kết quả truy vấn bằng 0
@Component public interface BookRepository extends MongoRepository { @Query["{id : ?0}"] Book findBookById[int id]; }0
6. loại
Phần tử@Query["{$or : [{writer: ?0}, {category : ?1}]}"] Stream findBooksByWriterOrCategory[String writer, String category];1 của
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }3 xác định thứ tự sắp xếp mặc định cho truy vấn đã cho. Giá trị -1 được sử dụng cho thứ tự giảm dần và 1 được sử dụng cho thứ tự tăng dần. Tìm ví dụ
a. Sắp xếp dữ liệu theo thứ tự tăng dần của
@Query["{$or : [{writer: ?0}, {category : ?1}]}"] Stream findBooksByWriterOrCategory[String writer, String category];3
@Component public interface BookRepository extends MongoRepository { @Query["{id : ?0}"] Book findBookById[int id]; }1b. Sắp xếp dữ liệu theo thứ tự giảm dần của
@Query["{$or : [{writer: ?0}, {category : ?1}]}"] Stream findBooksByWriterOrCategory[String writer, String category];3
@Component public interface BookRepository extends MongoRepository { @Query["{id : ?0}"] Book findBookById[int id]; }2Chúng ta cũng có thể thay đổi hành vi sắp xếp mặc định bằng cách chuyển đối tượng Spring Data
@Query["{$or : [{writer: ?0}, {category : ?1}]}"] Stream findBooksByWriterOrCategory[String writer, String category];5 làm đối số của phương thức
7. xóa bỏ
Phần tử@Query["{$or : [{writer: ?0}, {category : ?1}]}"] Stream findBooksByWriterOrCategory[String writer, String category];6 của
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }3 quyết định liệu truy vấn có nên xóa các tài liệu phù hợp hay không.
@Query["{$or : [{writer: ?0}, {category : ?1}]}"] Stream findBooksByWriterOrCategory[String writer, String category];6 được gán làm giá trị Boolean. Khi chúng tôi chỉ định
@Query["{writer : ?0, noOfPages : {$lt: ?1}}"] Stream findBooksByWriterAndLtThanNoOfPages[String writer, int noOfPages];6, phương thức này sẽ xóa dữ liệu khớp với truy vấn và trả về số lượng hàng đã xóa
@Component public interface BookRepository extends MongoRepository { @Query["{id : ?0}"] Book findBookById[int id]; }3
8. đối chiếu
Phần tử@Query["{$and : [{$or : [{noOfPages: {$gt: 275}}, {noOfPages : {$lt: 200}}]}, {$or : [{id: {$gt: 103}}, {id : {$lt: 102}}]}]}"] Stream findBestBooks[];0 của
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }3 xác định phép đối chiếu sẽ áp dụng khi thực hiện truy vấn. Tìm ví dụ
@Component public interface BookRepository extends MongoRepository { @Query["{id : ?0}"] Book findBookById[int id]; }4
9. Hoàn thành ví dụ
Tìm cấu trúc dự án trong Eclipse@Component public interface BookRepository extends MongoRepository { @Query["{id : ?0}"] Book findBookById[int id]; }5MongoDBConfig. java
@Component public interface BookRepository extends MongoRepository { @Query["{id : ?0}"] Book findBookById[int id]; }6Sách. java
@Component public interface BookRepository extends MongoRepository { @Query["{id : ?0}"] Book findBookById[int id]; }7Điền dữ liệu để kiểm tra
Chuẩn bị dữ liệuForQuery. java
@Component public interface BookRepository extends MongoRepository { @Query["{id : ?0}"] Book findBookById[int id]; }8Chúng tôi sẽ nhận được dữ liệu sau trong kho lưu trữ MongoDB của chúng tôi
@Component public interface BookRepository extends MongoRepository { @Query["{id : ?0}"] Book findBookById[int id]; }9Bây giờ hãy tìm lớp kho lưu trữ đang sử dụng chú thích
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }3
Kho lưu trữ sách. java
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }0Kiểm tra truy vấn. java
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }1đầu ra
@Component public interface BookRepository extends MongoRepository { @Query["{writer : ?0, category : ?1}"] Stream findBooksByWriterAndCategory[String writer, String category]; }2
10. Người giới thiệu
Dữ liệu mùa xuân MongoDB. @Truy vấnDữ liệu mùa xuân Tham khảo MongoDB