Isnull mongodb

Hướng dẫn SQL của chúng tôi sẽ hướng dẫn bạn cách sử dụng SQL trong. MySQL, SQL Server, MS Access, Oracle, Sybase, Informix, Postgres và các hệ thống cơ sở dữ liệu khác

Bắt đầu học SQL ngay bây giờ »

Ví dụ trong mỗi chương

Với trình soạn thảo SQL trực tuyến của chúng tôi, bạn có thể chỉnh sửa câu lệnh SQL và nhấp vào nút để xem kết quả

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách triển khai trường tuần tự, được tạo tự động cho MongoDB trong Spring Boot

Khi chúng ta đang sử dụng MongoDB làm cơ sở dữ liệu cho ứng dụng Spring Boot, chúng ta không thể sử dụng chú thích @GeneratedValue trong mô hình của mình vì nó không khả dụng. Do đó, chúng ta cần một phương pháp để tạo ra giá trị giống như chúng ta đang sử dụng JPA và cơ sở dữ liệu SQL

Tổng hợp hơn 200 tài liệu, sách, bài thực thi, video hướng dẫn lập trình… từ cơ bản đến nâng cao

Giải pháp cho vấn đề này rất đơn giản, tôi sẽ tạo ra 1 bộ sưu tập (bảng) sẽ lưu trữ trình tự đã tạo ra các bộ sưu tập khác. Trong quá trình tạo 1 bản ghi mới, chúng tôi sẽ sử dụng nó để tạo giá trị tiếp theo

phụ thuộc

quả bông. xml

<dependencies> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-webartifactId> <versionId>2.2.2.RELEASEversionId> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-data-mongodbartifactId> <versionId>2.2.2.RELEASEversionId> dependency> dependencies>

Code language: HTML, XML (xml)

Phiên bản mới nhất cho các phần phụ thuộc được quản lý bởi

bộ sưu tập

Như đã thảo luận trong phần tổng quan, tôi sẽ tạo ra một bộ sưu tập sẽ lưu trữ trình tự tăng dần cho các bộ sưu tập khác. Tôi sẽ gọi bộ sưu tập này là database_sequences. Nó có thể được tạo bằng cách sử dụng mongo shell hoặc MongoDB Compass. Hãy tạo một mô hình lớp tương ứng

THAM GIA KHÓA HỌC LẬP TRÌNH

@Document(collection = "database_sequences") public class DatabaseSequence { @Id private String id; private long seq; //getters and setters omitted }

Code language: PHP (php)

Sau đó, hãy tạo một tập hợp Người dùng và một mô hình đối tượng tương ứng, sẽ lưu trữ thông tin chi tiết về những người đang sử dụng hệ thống của tôi

@Document(collection = "users") public class User { @Transient public static final String SEQUENCE_NAME = "users_sequence"; @Id private long id; private String email; //getters and setters omitted }

Code language: PHP (php)

Trong mô hình Người dùng đã tạo ở trên, chúng tôi đã thêm một trường tĩnh SEQUENCE_NAME, là một tham chiếu duy nhất đến chuỗi tự động tăng dần cho người dùng tập hợp

Tôi cũng chú thích nó với @Transient để ngăn nó tồn tại cùng với các thuộc tính khác của mô hình

Tạo mới 1 bản ghi

Cho đến nay, tôi đã tạo ra các bộ sưu tập và mô hình cần thiết. Bây giờ, tôi sẽ tạo ra một dịch vụ sẽ tạo ra giá trị tự động tăng dần để có thể sử dụng id cho các thực thể của tôi

KHOÁ HỌC LẬP TRÌNH DÀNH CHO NGƯỜI MỚI

Please create a SequenceGeneratorService with createSequence()

public long generateSequence(String seqName) { DatabaseSequence counter = mongoOperations.findAndModify(query(where("_id").is(seqName)), new Update().inc("seq",1), options().returnNew(true).upsert(true), DatabaseSequence.class); return !Objects.isNull(counter) ? counter.getSeq() : 1; }

Code language: JavaScript (javascript)

Bây giờ, chúng ta có thể sử dụng createSequence() trong khi tạo một bản ghi mới

User user = new User(); user.setId(sequenceGenerator.generateSequence(User.SEQUENCE_NAME)); user.setEmail("[email protected]"); userRepository.save(user);

Code language: JavaScript (javascript)

To list all user, we will use UserRepository

List storedUsers = userRepository.findAll(); storedUsers.forEach(System.out::println);

Code language: PHP (php)

Như hiện tại, chúng ta phải đặt id trường mỗi khi chúng ta tạo phiên bản mới cho model của mình. Chúng ta có thể phá vỡ quá trình này bằng cách tạo trình lắng nghe cho các sự kiện vòng đời Spring Data MongoDB

Để làm điều đó, chúng tôi sẽ tạo một UserModelListener extends AbstractMongoEventListener và sau đó chúng tôi sẽ ghi đè onBeforeConvert():

@Override public void onBeforeConvert(BeforeConvertEvent<User> event) { if (event.getSource().getId() < 1) { event.getSource().setId(sequenceGenerator.generateSequence(User.SEQUENCE_NAME)); } }

Code language: HTML, XML (xml)

Bây giờ, mỗi khi tôi lưu Người dùng mới, id sẽ được đặt tự động

Kết luận

Chúng ta đã thấy cách tạo tự động tăng dần cho trường id và mô phỏng các hành động tương tự như đã thấy trong cơ sở dữ liệu SQL