我使用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;
...
}
他们的行为很奇怪:
服务启动后(尚未发出请求),创建了一个名为“NOT_PROVIDED_user”的集合,并创建了一个“name_1”索引。由于没有任何请求,因此租户是默认租户“NOT_PROVIDED”。但我的问题是为什么在收到任何请求之前创建此集合?
然后我使用“tenant1”向服务发送请求,按照我的预期创建一个名为“tenant1_user”的新集合。但问题是没有创建索引“name_1”。只有一个索引“ id ”。
有人能告诉我原因并指导我如何在我的多租户案例中创建索引吗?谢谢!