Ghi chú. Bài viết mang chất lưu lại kiến thức để sử dụng sau này mày mò google khắp nơi giải chút mới giải quyết được, nếu bạn nào gặp vấn đề tương tự thì có thể tham khảo
Số là mình bắt đầu thực hiện một dự án mới trên Spring Boot và cần làm việc với NoSQL, cụ thể là Mông Gô Đê Bê [MongoDB], trước thì mình đã đọc và tham khảo qua về SQL và NoSQL rồi, tuy nhiên mình . Đơn giản thì mình nghĩ chắc connect Mongo cũng thế thôi, vì JPA và Hibernate viết ra để dùng ALL In ONE mà. Cơ mà đâm đầu vào thì cũng mệt vãi đạn
Nội dung chính Hiển thị
- Ghi chú. Bài viết mang chất lưu lại kiến thức để sử dụng sau này mày mò google khắp nơi giải chút mới giải quyết được, nếu bạn nào gặp vấn đề tương tự thì có thể tham khảo
- 1 - Thêm phụ thuộc
- 2 - Config trong file yml
- 3 - Entity - Chỉ cần @Id thôi nhé, không cần chỉ định cột cũng dc. bên phải
- 4- Kho lưu trữ
- 5 - Cấu hình Mongo
- open start
- Các lưu ý cần thiết
- Các công cụ cơ bản
- Các thuật ngữ thường dùng trong bài viết
- Thực hiện
- Thao tác MongoDb dựa trên Tập hợp với Con trỏ
- Thao tác con trỏ trong Spring
- Kết luận
Những thứ cần chuẩn bị
1 project Spring Boot maven hay gradle thì tùy, mình dùng gradle
Máy chủ Mongo [Local cũng được]
Mongo Compass[ Có cũng dc mà không cũng được]
IDE - tất nhiên [ Mxài Intelij, bản 2020 trở lên tool mới hỗ trợ kết nối Mongo nhé]
Trước tiên các bạn cần nhớ table in Mongo not call is Table which
Bảng = Bộ sưu tập
Row = Documnent [ Giá trị khóa cặp]
Còn một vài thứ nữa các bạn tham khảo bài viết của bạn này nhé. Hướng dẫn Mongo cơ bản
Ấy thế mà trong thực thể @Table lại thay bằng @Document chứ không có cái @Collection ] Méo hiểu
[email protected]:27017/BaoTrung spring.jpa.show-sql=true logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG logging.level.org.springframework.web = DEBUG
Cấu hình trên máy chủ duy nhất đang chạy ở cổng 8989, mùa xuân. dữ liệu. mongodb. uri định cấu hình kết nối với cơ sở dữ liệu với các thông số như tên người dùng là root, mật khẩu là root, cổng 27017[default của mongoDb] và cơ sở dữ liệu là BaoTrung. Các thông số tiếp theo chỉ định việc hiển thị các lệnh khi thao tác với mongoDb cũng như nhật ký cấp độ khi thực hiện thao tác. Trong loạt bài viết đang sử dụng ở mức gỡ lỗi. cổng 8989, mùa xuân. dữ liệu. mongodb. uri định cấu hình kết nối với cơ sở dữ liệu với các thông số như tên người dùng là root, mật khẩu là root, cổng 27017[default của mongoDb] và cơ sở dữ liệu là BaoTrung.
Các thông số tiếp theo chỉ định việc hiển thị lệnh khi thao tác với mongoDb cũng như nhật ký cấp độ khi thực hiện thao tác. Trong loạt bài viết đang sử dụng ở mức gỡ lỗi.
Có một lưu ý ở đây. Trong bài viết đang sử dụng Mongo 3. 0 Java driver,cấu hình sẽ thông qua uri. Cấu hình bên dưới sẽ không thành công đối với phiên bản Mongo 3. 0 Trình điều khiển Java trở lên [chỉ áp dụng với Mongo 3. 0 Java driver trở xuống]. Lý do là mùa xuân. dữ liệu. mongodb. máy chủ và mùa xuân. dữ liệu. mongodb. cổng đã bị loại bỏ trong Mongo 3. 0 trình điều khiển JavaMongo 3. 0 Java driver,cấu hình sẽ thông qua uri. Cấu hình bên dưới sẽ không thành công đối với phiên bản Mongo 3. 0 Trình điều khiển Java trở lên [chỉ áp dụng với Mongo 3. 0 Java driver trở xuống]. Lý do là mùa xuân. dữ liệu. mongodb. máy chủ và mùa xuân. dữ liệu. mongodb. cổng đã bị loại bỏ trong Mongo 3. 0 Trình điều khiển Java
//Không áp dụng được với Mongo 3. 0 Trình điều khiển Java trở lên
________số 8Người mẫu
Thực hiện việc tạo một lớp có tên là Nhân viên như bên dưới. Nhân viên như phía dưới
Nhân viên. lớp
@Document[collection = "Employees"]
public class Employee {
@Id
private String id;
@Field[value = "firstName"]
@NotBlank[message = "FirstName can't empty!"]
private String firstName;
@NotBlank[message = "LastName can't empty!"]
private String lastName;
@NotNull
private Integer age;
@NotBlank[message = "Location can't empty!"]
private String location;
private Double salary;
public Employee[] {
}
public Employee[String id, String firstName, String lastName, Integer age, String location, Double salary] {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.location = location;
this.salary = salary;
}
public String getId[] {
return id;
}
public void setId[String id] {
this.id = id;
}
public String getFirstName[] {
return firstName;
}
public void setFirstName[String firstName] {
this.firstName = firstName;
}
public String getLastName[] {
return lastName;
}
public void setLastName[String lastName] {
this.lastName = lastName;
}
public Integer getAge[] {
return age;
}
public void setAge[Integer age] {
this.age = age;
}
public String getLocation[] {
return location;
}
public void setLocation[String location] {
this.location = location;
}
public Double getSalary[] {
return salary;
}
public void setSalary[Double salary] {
this.salary = salary;
}
@Override
public String toString[] {
return "Employee{" +
"id='" + id + '\'' +
", firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", age=" + age +
", location='" + location + '\'' +
", salary=" + salary +
'}';
}
}
Lớp trên chỉ đơn giản là sử dụng @Document xác định nó là một thực thể để có thể thao tác với MongoDb với các trường như Tên, Họ, Lương ,Tuổi, Vị trí. Có một lưu ý ở đây là do MongoDb đang sử dụng tài liệu có tên là Employee nên nếu muốn ánh xạ đúng tên tài liệu có tên là Employess thì chúng ta sẽ sử dụng
spring:
data:
mongodb:
authentication-database: admin
database: test
host: localhost
port: 27017
7@Document xác định nó là một thực thể để có thể thao tác với MongoDb với các trường như FirstName, LastName, Salary ,Age, Location. Có một lưu ý ở đây là do MongoDb đang sử dụng tài liệu có tên là Employee nên nếu muốn ánh xạ đúng tên tài liệu có tên là Employess thì chúng ta sẽ sử dụngspring:
data:
mongodb:
authentication-database: admin
database: test
host: localhost
port: 27017
7Tạo một lớp tên là EmployeeController và xác định các api cần thiết cho việc xử lý dữ liệu. Ở đây, chúng ta sẽ xác định các api như findByLocation ,calculTotalUser và calculatorSalaryEmployeeController và thực hiện xác định các api cần thiết cho việc xử lý dữ liệu. Ở đây chúng ta sẽ xác định các api như findByLocation , computeTotalUser và calculatorSalary
Bộ điều khiển.
nhân viênđiều khiển
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloudsigning
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password:
jpa:
hibernate:
ddl-auto: create
naming:
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategyserver
0Lớp điều khiển phía trên sẽ xác định các api cần thiết, các tham số đầu vào và trả về phản hồi chứa dữ liệu được bao bọc trong các DTO như EmployeeResult ,EmployeeDto based on information of each API. Các DTO này sẽ được định nghĩa bên dưới. Lưu ý rằng ở đây bộ điều khiển sẽ gọi trực tiếp đến kho lưu trữ không thông qua lớp dịch vụ hiện tại không có nhiều logic phức tạp để xử lý và đây là những xử lý đơn giản. Tùy theo logic và các yêu cầu mà các bạn có thể sử dụng để phù hợp trong từng dự án. EmployeeResult ,EmployeeDto dựa trên thông tin của mỗi API. Các DTO này sẽ được định nghĩa bên dưới. Lưu ý rằng ở đây bộ điều khiển sẽ gọi trực tiếp đến kho lưu trữ không thông qua lớp dịch vụ hiện tại không có nhiều logic phức tạp để xử lý và đây là những xử lý đơn giản. Tùy theo logic và các yêu cầu mà các bạn có thể sử dụng để phù hợp trong từng dự án
Tạo giao diện với tên là EmployeeRepository và EmployeeRepositoryCustom. EmployeeRepository và EmployeeRepositoryCustom
Kho lưu trữ nhân viên
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloudsigning
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password:
jpa:
hibernate:
ddl-auto: create
naming:
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategyserver
1Nhân viênKho lưu trữ Tùy chỉnh
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloudsigning
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password:
jpa:
hibernate:
ddl-auto: create
naming:
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategyserver
2Ở giao diện EmployeeRepositoryCustom chúng ta sẽ định cấu hình 3 method làEmployeeRepositoryCustom chúng ta sẽ định cấu hình 3 method là
- fetchAllLastNameByLocation với tham số là vị trí và trả về 1 danh sách các LastName dựa trên vị trí, với tham số là vị trí và trả về 1 danh sách các LastName dựa trên vị trí,
- countTotalUserByLocation với tham số là vị trí và trả về 1 danh sách tổng số người dùng theo vị trí dựa trên DTO EmployeeResult với tham số là vị trí và trả về 1 danh sách tổng số người dùng theo vị trí dựa trên DTO EmployeeResult
- Tính lươngByAgeAndLocation với tham số là vị trí và trả về 1 danh sách các mức lương tương ứng dựa trên tuổi và vị trí với tham số là vị trí và trả về 1 danh sách các mức lương tương ứng dựa trên tuổi và vị trí
nhân viênkết quả.
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloudsigning
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password:
jpa:
hibernate:
ddl-auto: create
naming:
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategyserver
3nhân viênDto
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloudsigning
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password:
jpa:
hibernate:
ddl-auto: create
naming:
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategyserver
4Tạo một lớp có tên là EmployeeRepositoryCustomImpl và thực hiện triển khai lại EmployeeRepositoryCustom như phía dưới. EmployeeRepositoryCustomImpl và thực hiện triển khai lại EmployeeRepositoryCustom như bên dưới
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloudsigning
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password:
jpa:
hibernate:
ddl-auto: create
naming:
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategyserver
5 Chúng ta sẽ thực hiện tính toán trong 3 phương thức này bằng cách sử dụng Aggregation based on MongoTemplate. Vậy MongoTemplate là gì ? . khung mùa xuân. dữ liệu. tài liệu. mongodb, cung cấp các tính năng phong phú được thiết lập để tương tác với cơ sở dữ liệu. MongoTemplate cung cấp các phương thức sử dụng để tạo, cập nhật, xóa và truy vấn tài liệu MongoDB và cung cấp ánh xạ giữa các mô hình và tài liệu. Đây là một lớp rất quan trọng trong việc thao tác với mongoDbAggregation dựa trên MongoTemplate. Vì vậy MongoTemplate là gì ?
Lớp MongoTemplate, nằm trong gói tổ chức. khung mùa xuân. dữ liệu. tài liệu. mongodb, cung cấp các tính năng phong phú được thiết lập để tương tác với cơ sở dữ liệu. MongoTemplate cung cấp các phương thức sử dụng để tạo, cập nhật, xóa và truy vấn tài liệu MongoDB và cung cấp ánh xạ giữa các mô hình và tài liệu. Đây là một lớp rất quan trọng trong thao tác với mongoDb
Tích hợp MongoTemplate vào EmployeeRepositoryCustom như sau. MongoTemplate vào EmployeeRepositoryCustom as after
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloudsigning
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password:
jpa:
hibernate:
ddl-auto: create
naming:
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategyserver
6Đối với phương thức fetchAllLastNameByLocation sẽ tiến hành xử lý như sau. fetchAllLastNameByLocation sẽ tiến hành xử lý như sau
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloudsigning
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password:
jpa:
hibernate:
ddl-auto: create
naming:
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategyserver
7Ở đây chúng ta có một lớp gọi là Criteria. Vậy Criteria là gì ? . khung mùa xuân. dữ liệu. mongodb. cốt lõi. truy vấn cung cấp nhiều phương thức để thực hiện truy vấn như WHERE , IS , LT, GT. Nó cũng cung cấp một cách tuần tự việc thực hiện các truy vấn đó. Tiêu chuẩn. Vậy Criteria là gì ? . khung mùa xuân. dữ liệu. mongodb. cốt lõi. truy vấn cung cấp nhiều phương thức để thực hiện truy vấn như WHERE , IS , LT, GT. Nó cũng cung cấp một cách tuần tự việc thực hiện các truy vấn đó
spring:
data:
mongodb:
authentication-database: admin
database: test
host: localhost
port: 27017
8 dùng để tạo ra một tiêu chí chứa điều kiện là các vị trí trong cơ sở dữ liệu phải bằng với vị trí từ tham số đã nhập vào từ Bộ điều khiển. tiêu chí chứa điều kiện là các vị trí trong cơ sở dữ liệu phải bằng với vị trí từ tham số đã nhập vào từ Bộ điều khiển. spring:
datasource:
url: jdbc:mysql://localhost:3306/cloudsigning
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password:
jpa:
hibernate:
ddl-auto: create
naming:
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategyserver
8Câu lệnh trên được sử dụng để thực hiện tạo một đường ống có khớp toán tử [tiêu chí] với tiêu chí đã định nghĩa về phía trên và nhóm theo tên cuối cùng
Kế đến câu lệnh
spring:
data:
mongodb:
authentication-database: admin
database: test
host: localhost
port: 27017
9spring:
data:
mongodb:
authentication-database: admin
database: test
host: localhost
port: 27017
9used mongoTemplate thao tác với cơ sở dữ liệu với aggregation đã được định nghĩa phía trên, tên collections là Employee và trả về DTO là EmployeeDto. classaggregation is default on, collections name is Nhân viên và trả về DTO là EmployeeDto. lớp
Cuối cùng các câu lệnh như phía dưới thực hiện tạo ra 1 danh sách các LastName với kiểu String, lấy kết quả từ các kết quả đã trả về , lặp và trả về danh sách các LastNameLastName với kiểu String, lấy kết quả từ các kết quả đã trả về , it
Kết quả khi thực hiện cuộc gọi API trên người đưa thư
Nhìn vào log trong spring, chúng ta có thể thấy dễ dàng Spring Data Mongo đã thực hiện phân tích cú pháp lệnh chúng ta viết phía sau cú pháp MongoDb theo dạng Pipeline tuần tự. khớp -> nhóm và thực hiện thao tác với MongoDb
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloudsigning
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password:
jpa:
hibernate:
ddl-auto: create
naming:
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategyserver
9Đối với phương thức countTotalUserByLocation sẽ thực hiện tính toán như sau. countTotalUserByLocation sẽ thực hiện tính toán như sau
spring:
data:
mongodb:
authentication-database: admin
database: test
host: localhost
port: 27017
0Cách thực hiện tương tự như ví dụ trên. Thực hiện việc tạo dựa trên một Tiêu chí để thực hiện tìm kiếm dựa trên Vị trí và sử dụng Tập hợp để tạo các Đường ống để thực hiện tuần tự. Nhóm vị trí và thực hiện Đếm trên từng vị trí đó. Tuy nhiên, có 1 sự khác biệt là chúng ta sẽ sử dụng thêm một lớp là AggregationOperation để xử lý riêng cho từng toán tử như đối sánh, nhóm. Điều này làm cho mã của chúng ta rõ ràng và dễ dàng duy trì hơn. Ở đây chúng ta sẽ thực hiện lấy kết quả trực tiếp từ AggregationResults bằng phương thức getMappedResults được định nghĩa sẵn trong api của mongoDb. Tập hợp để tạo các đường ống để thực hiện tuần tự. Nhóm vị trí và thực hiện Đếm trên từng vị trí đó. Tuy nhiên, có 1 sự khác biệt là chúng ta sẽ sử dụng thêm một lớp là AggregationOperation để xử lý riêng cho từng toán tử như đối sánh, nhóm. Điều này làm cho mã của chúng ta rõ ràng và dễ dàng duy trì hơn. Ở đây chúng ta sẽ thực hiện lấy kết quả trực tiếp từ AggregationResults bằng phương thức getMappedResults được định nghĩa sẵn trong api của mongoDb
Kết quả khi thực hiện api. Kết quả hiển thị trên log spring. Kết quả hiển thị trên log spring
spring:
data:
mongodb:
authentication-database: admin
database: test
host: localhost
port: 27017
1Cũng tương tự như ví dụ về phía trên, Spring Data MongoDb dựa trên các lệnh chúng tôi đã viết để thực hiện việc tạo các Đường ống theo tuần tự. $match theo vị trí , $group theo vị trí và tính tổng dựa trên $sum
Đối với phương thức tínhSalaryByAgeAndLocation thực hiện xử lý như sau. Tính lươngByAgeAndLocation thực hiện xử lý như sau
spring:
data:
mongodb:
authentication-database: admin
database: test
host: localhost
port: 27017
2Đối với phương thức tínhSalaryByAgeAndLocation sẽ thực hiện tính toán dựa trên 2 đk. tuổi và địa điểm. Tiêu chí sẽ thực hiện lấy những đk có tuổi lớn hơn hoặc bằng tuổi được nhập vào và vị trí bằng vị trí từ thông số được nhập vào. Toán tử AggregationOperation sẽ thực hiện tương tự các trình tự như đối sánh, nhóm theo vị trí, tính tổng dựa trên tiền lương và thực hiện tham chiếu đến từng Họ của Nhân viên bằng lệnh đẩy. computeSalaryByAgeAndLocation sẽ thực hiện tính toán dựa trên 2 đk. tuổi và địa điểm. Tiêu chí sẽ thực hiện lấy những đk có tuổi lớn hơn hoặc bằng tuổi được nhập vào và vị trí bằng vị trí từ thông số được nhập vào. Toán tử AggregationOperation sẽ thực hiện tương tự các trình tự như đối sánh, nhóm theo vị trí, tính tổng dựa trên tiền lương và thực hiện tham chiếu đến từng Họ của Nhân viên bằng lệnh đẩy
Kết quả
Nhật ký
spring:
data:
mongodb:
authentication-database: admin
database: test
host: localhost
port: 27017
3We can see. Spring Mongo Db đã phân tích cú pháp các câu lệnh mà chúng viết ra dưới dạng Pipeline , với các toán tử khớp. tuổi lớn hơn hoặc bằng 23, vị trí Nhóm DN theo vị trí tính tổng dựa trên tiền lương
Thao tác MongoDb dựa trên Tập hợp với Con trỏ
Qua các ví dụ trên mongoTemplate cung cấp rất nhiều tiện ích cũng như phương thức thao tác với mongoDb. Tuy nhiên có 1 hạn chế ở đây ? . Vì sao như vậy?
Về con trỏ là gì cũng như có những phương thức nào các bạn có thể tham khảo tài liệu của MongoDb. https. // tài liệu. mongodb. com/manual/reference/method/js-cursor/?searchProperty=current&query=Cursor. Lưu ý là Cursor có các phương thức riêng để xử lý, không thể sử dụng các phương thức của bộ sưu tập để xử lý Cursor
Lưu ý. Lí do sử dụng dựa trên Con trỏ chỉ áp dụng đối với lượng dữ liệu vượt quá 16 MB. Nếu dữ liệu nhỏ hơn 16 MB, hãy sử dụng mongoTemplate. Con trỏ sử dụng sẽ khiến cơ sở dữ liệu của bạn chậm đi đáng kể dẫn đến hiệu suất không ổn định
Thao tác con trỏ trong Spring
Trước tiên chúng ta tạo 1 phương thức trong lớp EmployeeController như thế này
spring:
data:
mongodb:
authentication-database: admin
database: test
host: localhost
port: 27017
4Phương thức này sẽ trả về 1 danh sách các LastName không trùng lặp
Tiếp tục theo cách tạo một phương thức có tên fetchAllLastNameByLocationUsedCursor trong Giao diện EmployeeRepositoryCustom và EmployeeRepositoryCustomImpl
Nhân viênKho lưu trữ Tùy chỉnh.
@Entity
@Document[value = "user"]
public class UserAccount {
@Id
private Integer id;
private String userName;
0Nhân viênRepositoryCustomImpl
Tiến hành tìm tất cả các LastName dựa trên vị trí bằng Cursor
spring:
data:
mongodb:
authentication-database: admin
database: test
host: localhost
port: 27017
5Thay vì sử dụng các lớp Employee để thực hiện ánh xạ, BasicDBObject thực hiện đọc trực tiếp vào Bson với tên trường là vị trí, MongoClient xác định các kết nối như tên máy chủ, cổng, tên cơ sở dữ liệu. Phía trên tên host là localHost,port là 27017 và tên cơ sở dữ liệu là BaoTrung. Ở đây chúng ta sử dụng lớp DBCollection để lấy bộ sưu tập trực tiếp từ MongoClient. Bộ sưu tập được up ở đây là Nhân viên. Thực hiện tạo một Set chứa các LastName mong muốn trả về. Con trỏ con trỏ = coll. tìm [truy vấn]; . Các phương thức như con trỏ. hasNext[] và con trỏ. next[] dùng để thực hiện tuần tự tìm kiếm trong các bảng ghi. Last Name. ví dụ thêm [[[Chuỗi]. get["Họ"]]]; . BasicDBObject thực hiện đọc trực tiếp vào Bson với tên trường là vị trí, MongoClient xác định các kết nối như tên máy chủ, cổng, tên cơ sở dữ liệu. Phía trên tên host là localHost,port là 27017 và tên cơ sở dữ liệu là BaoTrung. Ở đây chúng ta sử dụng lớp DBCollection để lấy bộ sưu tập trực tiếp từ MongoClient. Bộ sưu tập được up ở đây là Nhân viên. Thực hiện tạo một Set chứa các LastName mong muốn trả về. Con trỏ con trỏ = coll. tìm [truy vấn]; . Các phương thức như con trỏ. hasNext[] và con trỏ. next[] dùng để thực hiện tuần tự tìm kiếm trong các bảng ghi. Last Name. ví dụ thêm [[[Chuỗi]. get["Họ"]]];
Kết quả khi thực hiện cuộc gọi api
Đăng nhập vào mùa xuân
spring:
data:
mongodb:
authentication-database: admin
database: test
host: localhost
port: 27017
6Nhìn vào nhật ký có thể thấy bất kỳ Spring Data nào MongoDb đã k còn phân tích cú pháp ra các Pipeline nữa mà công việc thực hiện hoàn toàn dựa trên thao tác con trỏ trên bộ nhớ của mongoDB và trả về kết quả
Kết luận
Qua bài viết trên , mình đã giới thiệu cách sử dụng Aggregation in spring, cách sử dụng mongoTemplate và Cursor. Sự khác nhau và khi nào nên sử dụng Cursor khi nào không. Hy vọng sẽ giúp mọi người hiểu thêm về Tổng hợp và tích hợp vào dự án. Hẹn gặp lại mọi người ở các bài viết tiếp theoAggregation trong spring, cách sử dụng mongoTemplate và Cursor. Sự khác nhau và khi nào nên sử dụng Cursor khi nào không. Hy vọng sẽ giúp mọi người hiểu thêm về Tổng hợp và tích hợp vào dự án. Hẹn gặp lại mọi người ở các bài viết tiếp theo