Khởi động mùa xuân mongodb tham gia hai bộ sưu tập

Sử dụng Spring Data MongoDB, chúng ta có thể tạo MongoClient để thực hiện các thao tác đối với cơ sở dữ liệu. Tuy nhiên, đôi khi, chúng ta có thể cần sử dụng nhiều cơ sở dữ liệu trong các ứng dụng của mình

Trong hướng dẫn này, chúng ta sẽ tạo nhiều kết nối tới MongoDB. Chúng tôi cũng sẽ thêm một số thử nghiệm Khởi động mùa xuân để mô phỏng kịch bản này

2. Ứng dụng nhiều cơ sở dữ liệu với dữ liệu mùa xuân MongoDB

Khi sử dụng MongoDB, chúng ta tạo một MongoTemplate để truy xuất dữ liệu. Vì vậy, chúng tôi có thể tạo nhiều mẫu để kết nối với nhiều cơ sở dữ liệu khác nhau

Tuy nhiên, chúng ta có thể nhận được NoUniqueBeanDefinitionException vì Spring không tìm thấy một bean duy nhất

Với suy nghĩ này, hãy xem cách chúng ta có thể xây dựng cấu hình Spring Boot

2. 1. Thiết lập phụ thuộc

Hãy bắt đầu bằng cách thêm các phụ thuộc vào pom. xml. Đầu tiên, chúng ta cần một bộ khởi động mùa xuân

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.4</version>
    <relativePath />
</parent>

Sau đó, chúng tôi cần các phụ thuộc cho trình khởi chạy web và dữ liệu MongoDB

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Tương tự, nếu chúng ta sử dụng Gradle, chúng ta thêm vào bản dựng. phân lớp

plugins {
    id 'org.springframework.boot' version '2.6.4'
}
compile 'org.springframework.boot:spring-boot-starter-data-mongodb'
compile 'org.springframework.boot:spring-boot-starter-web'

Để thay thế, chúng ta có thể sử dụng Spring Initializr

2. 2. Mô hình

Đầu tiên, hãy thêm mô hình của chúng tôi. Chúng tôi sẽ tạo hai tài liệu sẽ được sử dụng bởi hai cơ sở dữ liệu khác nhau

Ví dụ: chúng tôi sẽ tạo tài liệu Người dùng

@Document(collection = "user")
public class User {

    @MongoId
    private ObjectId id;

    private String name;

    private String surname;
    private String email;

    private int age;

    // getters and setters
}

Sau đó, hãy thêm một tài liệu Tài khoản

@Document(collection = "account")
public class Account {

    @MongoId
    private ObjectId id;

    private String userEmail;

    private String nickName;

    private String accountDomain;

    private String password;

    // getters and setters
}

2. 3. Kho

Sau đó, chúng tôi tạo một kho lưu trữ cho từng lớp mô hình với một số phương thức Dữ liệu mùa xuân

Đầu tiên, hãy thêm một UserRepository

@Repository
public interface UserRepository extends MongoRepository<User, String> {

    User findByEmail(String email);
}

Sau đây, chúng tôi thêm một AccountRepository

@Repository
public interface AccountRepository extends MongoRepository<Account, String> {

    Account findByAccountDomain(String account);
}

2. 4. Thuộc tính kết nối

Hãy xác định các thuộc tính cho nhiều cơ sở dữ liệu chúng tôi đang sử dụng

________số 8

Điều đáng chú ý là chúng tôi có một thuộc tính cho DB cụ thể mà chúng tôi sẽ sử dụng để xác thực

2. 5. Cấu hình chính

Bây giờ, chúng tôi cần cấu hình của chúng tôi. Chúng tôi sẽ tạo một cái cho mỗi cơ sở dữ liệu

Hãy xem định nghĩa lớp chính của chúng tôi được sử dụng cho Kho lưu trữ người dùng

@Configuration
@EnableMongoRepositories(basePackageClasses = UserRepository.class, mongoTemplateRef = "primaryMongoTemplate")
@EnableConfigurationProperties
public class PrimaryConfig {
    // beans
}

Để chứng minh, hãy chia nhỏ tất cả các loại đậu và chú thích

Đầu tiên, chúng tôi sẽ truy xuất và đặt thuộc tính bằng MongoProperties. Bằng cách này, chúng tôi ánh xạ trực tiếp tất cả các thuộc tính tới một bean

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
0

Để cấp quyền truy cập cho nhiều người dùng, chúng tôi sử dụng cơ chế xác thực MongoDB với MongoCredential. Chúng tôi xây dựng đối tượng thông tin xác thực của mình bằng cách thêm cơ sở dữ liệu xác thực, quản trị viên trong trường hợp này

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
1

Theo đề xuất của các bản phát hành mới nhất, chúng tôi đang sử dụng SimpleMongoClientDatabaseFactory thay vì tạo MongoTemplate từ chuỗi kết nối

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
2

Chúng tôi cần các hạt của mình là @Primary ở đây vì chúng tôi sẽ thêm nhiều cấu hình cơ sở dữ liệu hơn. Nếu không, chúng tôi sẽ rơi vào ràng buộc duy nhất mà chúng tôi đã thảo luận trước đó

Chúng tôi làm tương tự với JPA khi chúng tôi ánh xạ nhiều EntityManager. Tương tự, chúng ta sẽ cần một tham chiếu đến Mongotemplate trong @EnableMongoRepositories của chúng ta

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
3

2. 6. Cấu hình phụ

Cuối cùng, để kiểm tra lại, chúng ta hãy xem cấu hình cơ sở dữ liệu thứ hai

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
4

Trong trường hợp này, nó sẽ tham chiếu AccountRepository hoặc tất cả các lớp thuộc cùng một gói

3. bài kiểm tra

Chúng tôi sẽ kiểm tra ứng dụng dựa trên phiên bản MongoDB. Chúng ta có thể sử dụng MongoDB với Docker

3. 1. Bắt đầu Bộ chứa MongoDB

Hãy chạy bộ chứa MongoDB bằng Docker Compose. Hãy xem mẫu YAML của chúng tôi

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
5

Chúng tôi cần khởi tạo với người dùng root nếu chúng tôi muốn xác thực được thực hiện. Để phổ biến cơ sở dữ liệu với nhiều người dùng hơn, chúng tôi sẽ thêm một liên kết gắn kết vào tệp init JavaScript

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
6

Hãy chạy container của chúng tôi

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
7

Khi vùng chứa bắt đầu, nó sẽ tạo một ổ đĩa cho mongo-init. js và sao chép nó vào điểm vào của vùng chứa

3. 2. Kiểm tra khởi động mùa xuân

Hãy kết hợp tất cả lại với nhau trong một số bài kiểm tra Khởi động mùa xuân cơ bản

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
8

Chủ yếu, chúng tôi muốn thiết lập kết nối cho cơ sở dữ liệu và nhận xác thực. Nếu không, chúng tôi có thể có cơ sở dữ liệu không được điền hoặc phiên bản MongoDb không được bắt đầu

Trong những trường hợp đó, chẳng hạn, chúng ta có thể xem nhật ký của bộ chứa DB

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
9

Điều đáng chú ý là JavaScript ban đầu chỉ thực thi lần đầu tiên vùng chứa chạy. Vì vậy, nếu chúng tôi cần chạy với một tập lệnh khác, chúng tôi có thể cần xóa ổ đĩa

plugins {
    id 'org.springframework.boot' version '2.6.4'
}
0

4. Phần kết luận

Trong bài viết này, chúng ta đã thấy cách tạo nhiều kết nối với Spring Data MongoDB. Chúng tôi đã thấy cách thêm thông tin đăng nhập để được xác thực. Quan trọng nhất, chúng tôi đã thấy cách tạo cấu hình, một trong số đó phải có các hạt chính. Cuối cùng, chúng tôi đã thêm một số trường hợp thử nghiệm đối với phiên bản MongoDB đang chạy bằng thử nghiệm Docker và Spring Boot,

Làm cách nào để tham gia hai bộ sưu tập trong MongoDB bằng Spring Boot?

Để thực hiện MongoDB Tham gia hai bộ sưu tập, bạn phải sử dụng toán tử tra cứu $ . Nó được định nghĩa là một giai đoạn thực hiện nối ngoài bên trái với một bộ sưu tập khác và hỗ trợ lọc dữ liệu từ các tài liệu đã nối. Ví dụ: nếu người dùng yêu cầu tất cả các điểm từ tất cả học sinh, thì truy vấn bên dưới có thể được viết. Sinh viên.

Làm cách nào để lấy dữ liệu từ hai bộ sưu tập trong cầy mangut?

Để lấy dữ liệu từ một bộ sưu tập với Mongoose trong NodeJS, bạn phải có hai thứ cần thiết. .
Lược đồ. Nó là một cấu trúc tài liệu chứa thuộc tính với các loại của nó (giá trị mặc định, xác thực, v.v. .
Mô hình. Nó là một lớp được tạo với sự trợ giúp của Schema đã xác định và tài liệu MongoDB là một thể hiện của Model

MongoDB có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?

Không trực tiếp, không. Tuy nhiên, MongoDB không hỗ trợ ngôn ngữ truy vấn phong phú của riêng nó. Để biết ví dụ về cách sử dụng ngôn ngữ truy vấn của MongoDB, hãy xem MongoDB CRUD Operations. Bạn cũng có thể sử dụng Trình kết nối MongoDB cho BI để truy vấn các bộ sưu tập MongoDB bằng SQL

Chúng tôi có thể thực hiện phép nối trong MongoDB không?

May mắn thay, Việc tham gia MongoDB có thể được thực hiện trong MongoDB 3. 2 vì nó giới thiệu một thao tác Tra cứu mới có thể thực hiện các thao tác Tham gia trên Bộ sưu tập.