将 mongo 个实体保存到不同的集合

save mongo entity to the different collections

我一直在使用 Spring 数据将实体保存到 mongo 数据库,目前我的代码如下所示:

我有一个回购 class:

public interface LogRepo extends MongoRepository<Log, String> {

}

我有一个如下所示的实体日志:

@Document(
        collection = "logs"
)
public class Log {

    @Id
    private String id;
    private String jsonMessage;


    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getJsonMessage() {
        return jsonMessage;
    }

    public void setJsonMessage(String jsonMessage) {
        this.jsonMessage = jsonMessage;
    }
}

这对我来说效果很好,但是这种方法仅适用于我想将日志实体保存到 "logs" 集合的情况。但是,如果我能够根据上下文将 Log 实体保存到不同的集合中,那将是非常好的。我的意思是在运行时定义集合名称会很好。有可能吗?

谢谢,干杯

尝试使用继承并以这种方式定义适当的集合名称。可能会让您有可能保存在不同的集合中,但您仍然无法动态指定集合名称和 resp。它们在运行时的数量。

@Document(
        collection = "logs"
)
public class Log {

    @Id
    private String id;
    private String jsonMessage;


    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getJsonMessage() {
        return jsonMessage;
    }

    public void setJsonMessage(String jsonMessage) {
        this.jsonMessage = jsonMessage;
    }
}

@Document(
        collection = "log_child"
)
public class LogChild extends Log{}

使用 MongoOperations 保存方法,您可以选择要使用的 class 根据 class 它会选择合适的集合。​​

@Document(collection = "collection_#{T(com.github.your_project.DBUtils).getCollectionName()}")
public Class Collection

您可以使用静态 getter

实时更改名称
@UtilityClass
public class DBUtils {

    private String collectionName;

    public String getCollectionName() {
        return collectionName;
    }

    public void setCollectionName(String collectionName) {
        DBUtils.collectionName = collectionName;
    }
}