java - 如何在 Spring Boot 中使用 MongoDB 生成序列号?
问题描述
我正在开发一个 Spring Boot 项目并决定使用 MongoDB 。我只想在 MongoDB 中生成序列号。因此,即使有 100 多个不同的客户尝试这样做,我也不想与任何生成的数字发生冲突。有什么办法吗?
我也试着做这样的事情:
SequenceNumber sequenceNumber;
String SEQUENCE_NAME = "example";
sequenceNumber = mongoOperations.findAndModify(query(where("_id").is(SEQUENCE_NAME)),
new Update().inc("number", 1), options().returnNew(true).upsert(true),
SequenceNumber.class);
return sequenceNumber.getNumber();
这个对吗 ?
感谢您的回答!
解决方案
https://www.javaprogramto.com/2019/05/spring-boot-mongodb-auto-generated-field.html
- 首先,创建一个将自动递增的值存储在其中的集合。这可以使用 mongo shell 或 MongoDB Compass 创建
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "database_sequences")
public class DatabaseSequence {
@Id
private String id;
private long seq;
public DatabaseSequence() {}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public long getSeq() {
return seq;
}
public void setSeq(long seq) {
this.seq = seq;
}
}
- 然后让我们创建一个 users_db 集合。此集合存储正在使用的用户。
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "users_db")
public class User {
@Transient
public static final String SEQUENCE_NAME = "users_sequence";
@Id
private long id;
private String firstName;
private String lastName;
private String email;
public User() { }
public User(String firstName, String lastName, String email) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
}
public long getId() {
return id;
}
public void setId(long 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 String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" + "id=" + id + ", firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' + ", email='" + email + '\'' + '}';
}
推荐阅读
- node.js - 护照验证 jwt 没有响应
- swift - 如何从函数内的 if let 语句返回值?
- angular - 更新了 Angular slickgrid 的 GridOption
- r - 如何使用 R 管道对数据框进行子集化
- amazon-web-services - 使用 WebSocket 协议与 AWS IoT Core 连接
- reactjs - 使用“npx create-react-app my-app --template typescript”创建新的 react-typescript 应用程序的问题
- java - 将 XML 中的线性布局动态添加到另一个线性布局
- docker - 在 Dockerfile 中的 ElasticSearch 上安装插件失败并出现 SSL 错误
- google-app-engine - 可以将多少个 SSL 证书(任何受支持的类型)添加到单个 Google AppEngine?
- javascript - 通过 id 将类添加到数据表行