使用Spring Boot在Mongodb中创建索引

时间:2017-06-05 08:58:55

标签: mongodb spring-boot indexing spring-mongodb

我使用Mongodb作为Spring Boot的持久层。在我的项目中,我希望通过为每个租户创建一个集合来实现多租户功能。例如。如果有三个租户,我将有3个用户集合:tenant1_user,tenant2_user,tenant3_user。所以我按如下方式编写模型类:

@Document(collection = "#{tenantResolver.getCurrentTenant()}_user")
public class User {
    private String name;
    ...
}

tenantResolver.getCurrentTenant()给出了当前的租户。如果没有提供租户,则默认租户为NOT_PROVIDED。

这很有效,直到我试图将索引引入我的Mongodb。我尝试了两种方法使字段“名称”成为索引:

一个。在“名称”字段前面添加@Indexed注释。

@Document(collection = "#{tenantResolver.getCurrentTenant()}_user")
public class User {
    @Indexed
    private String name;
    ...
}

湾使用@CompoundIndexes。

@CompoundIndexes({
    @CompoundIndex(name = "name_1", def = "{'name': 1}")
})
@Document(collection = "#{tenantResolver.getCurrentTenant()}_user")
public class User {
    private String name;
    ...
}

他们的行为很奇怪:

  1. 服务启动后(尚未发出请求),创建了一个名为“NOT_PROVIDED_user”的集合,并创建了一个“name_1”索引。由于没有任何请求,因此租户是默认租户“NOT_PROVIDED”。但我的问题是为什么在收到任何请求之前创建此集合?

  2. 然后我使用“tenant1”向服务发送请求,按照我的预期创建一个名为“tenant1_user”的新集合。但问题是没有创建索引“name_1”。只有一个索引“ id ”。

  3. 有人能告诉我原因并指导我如何在我的多租户案例中创建索引吗?谢谢!

0 个答案:

没有答案