首页 > 解决方案 > 如何在 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();

这个对吗 ?

感谢您的回答!

标签: javamongodbspring-bootnosql

解决方案


https://www.javaprogramto.com/2019/05/spring-boot-mongodb-auto-generated-field.html

  1. 首先,创建一个将自动递增的值存储在其中的集合。这可以使用 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;
    }
}
  1. 然后让我们创建一个 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 + '\'' + '}';
    }

推荐阅读