Truy vấn ví dụ khởi động mùa xuân mongodb

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ôi
1. 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);
} 

Nó cũng có thể được viết như sau

@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 (

We can use gt (>) and lt (<) with
@Component
public interface BookRepository extends MongoRepository {
        @Query("{writer : ?0, category : ?1}")
        Stream findBooksByWriterAndCategory(String writer, String category);
} 
3 in JSON query. For gt (>) we need to use
try (Stream stream = repository.findBooksByWriterAndCategory("Krishna", "Frontend")) {
     stream.forEach(book -> System.out.println(book));
} 
3 and for lt (<), we need to use
try (Stream stream = repository.findBooksByWriterAndCategory("Krishna", "Frontend")) {
     stream.forEach(book -> 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);
} 
1

b. 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);
} 
2

Chú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

Truy vấn ví dụ khởi động mùa xuân mongodb

quả bông. xml

@Component
public interface BookRepository extends MongoRepository {
	@Query("{id : ?0}")
	Book findBookById(int id);
} 
5

MongoDBConfig. java

@Component
public interface BookRepository extends MongoRepository {
	@Query("{id : ?0}")
	Book findBookById(int id);
} 
6

Sá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);
} 
8

Chú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);
} 
9

Bâ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);
} 
0

Kiể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ấn
Dữ liệu mùa xuân Tham khảo MongoDB

11. Tải xuống mã nguồn

Làm cách nào để truy vấn MongoDB trong Spring Boot?

Về cơ bản, có 4 cách để chúng ta có thể truy vấn MongoDB từ ứng dụng khởi động mùa xuân. .
Các phương thức được tạo tự động với kho lưu trữ Mongo
Sử dụng Chú thích @Query
Sử dụng Truy vấn tiêu chí với MongoTemplate
Sử dụng Truy vấnDSL

Làm cách nào để lấy các trường cụ thể từ MongoDB trong Spring Boot?

Chỉ trả về các trường cụ thể cho một truy vấn trong Spring Data MongoDB .
Tổng quan. Khi sử dụng Spring Data MongoDB, chúng ta có thể cần hạn chế các thuộc tính được ánh xạ từ một đối tượng cơ sở dữ liệu. .
Hạn chế các trường MongoDB bằng phép chiếu. .
Thực hiện phép chiếu. .
Kiểm tra bằng MongoRepository và MongoTemplate. .
Phần kết luận

Làm cách nào để thực thi truy vấn trong MongoDB bằng Java?

Làm cách nào để thực thi MongoDB trong chương trình Java? .
Kết nối cơ sở dữ liệu
Tạo kết nối
Chọn một kết nối
Chèn một tài liệu
Truy xuất tất cả tài liệu
Xóa tài liệu
Cập nhật tài liệu

Chúng tôi có thể sử dụng JPA với MongoDB không?

Các lớp thực thể JPA