如何将 Java 实体映射到 Spring 数据中的多个 MongoDB 集合?

How to Map a Java Entity to Multiple MongoDB Collections in Spring Data?

目前,我们正在寻找将以下 User 实体同时保存到多个 MongoDB 集合中的解决方案(即 db_usersdb_users_legacy ).两个集合都在同一个数据库中。

请不要问我为什么要保存在两个集合中。这是业务需求。

@Document(collection = "db_users")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

    @Id
    private String id;
    private String name;
    private String website;
    private String name;
    private String email;

}

我的 SpringBoot 应用程序配置为;

@Configuration
public class ApplicationConfig {

    @Bean
    public MongoTemplate mongoTemplate(MongoDbFactory factory){
        MongoTemplate template = new MongoTemplate(factory);
        template.setWriteConcern(WriteConcern.ACKNOWLEDGED);
        retu,rn template;
    }

}

目前我的存储库看起来像这样。保存工作非常好。我怎样才能在两个不同的集合中使用相同的文档?

@Repository
public class UserRepositoryImpl implements UserRepository {

    private MongoTemplate mongoTemplate;

    public UserRepositoryImpl(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    @Override
    public void save(User user) {
        mongoTemplate.save(user);
    }

}

请问有谁能提出解决这个问题的最佳方案吗?

我建议使用 MongoTemplate 的另一个 overloaded save method

@Override
public void save(User user) {
    mongoTemplate.save(user, "db_users");
    mongoTemplate.save(user, "db_users_legacy");
}

这可用于将同一对象保存到多个集合中。 来自文档,

You can customize this by providing a different collection name using the @Document annotation. You can also override the collection name by providing your own collection name as the last parameter for the selected MongoTemplate method calls.

因此 @Document 中具体提供的集合名称并不重要,您始终可以使用 MongoTemplate.

覆盖它