恐怕 Micronaut Data 还不支持 MongoDB 基于注解的自动索引创建。Micronaut Data 现在简化了仅使用 SQL 数据库的工作。
但是您仍然可以像这样手动创建索引MongoClient
:
@Singleton
public class ProductRepository {
private final MongoClient mongoClient;
public ProductRepository(MongoClient mongoClient) {
this.mongoClient = mongoClient;
}
public MongoCollection<Product> getCollection() {
return mongoClient
.getDatabase("some-database")
.getCollection("product", Product.class);
}
@PostConstruct
public void createIndex() {
final var weights = new BasicDBObject("name", 10)
.append("description", 5);
getCollection()
.createIndex(
Indexes.compoundIndex(
Indexes.text("name"),
Indexes.text("description")
),
new IndexOptions().weights(weights)
)
.subscribe(new DefaultSubscriber<>() {
@Override
public void onNext(String s) {
System.out.format("Index %s was created.%n", s);
}
@Override
public void onError(Throwable t) {
t.printStackTrace();
}
@Override
public void onComplete() {
System.out.println("Completed");
}
});
}
}
您当然可以使用任何您想要的订阅者。该匿名类扩展DefaultSubscriber
在这里仅用于演示目的。
更新:您可以在启动时创建索引,例如使用@PostConstruct
. 这意味着将所有索引创建逻辑添加到@PostConstruct
某个存储库或由注释的服务类中注释的方法中@Singleton
,然后将在存储库/服务单例创建后调用。