我正在阅读Spring Data MongoDB的文档,我看到两种不同的创建索引的方法:使用indexOps
mongoTemplate.indexOps(Person.class).ensureIndex(new Index().on("name",Order.ASCENDING));
或通过注释@Indexed
和其他(@CompoundIndex
,@GeoSpatialIndexed
,@TextIndexed
)
我的问题是:两种方法之间的差异以及我应该如何/何时使用其中一种
答案 0 :(得分:1)
两种方法(@Indexed
和().ensureIndex(...)
)都实现了相同的目标,唯一的区别是一个是声明性的而另一个是必要的。来自documentation:
@Indexed
注释告诉映射框架调用 在文档的该属性上创建createIndex(...),进行搜索 更快。
来自MongoTemplate
的代码(具体为DefaultIndexOperations#ensureIndex
):
collection.createIndex(indexDefinition.getIndexKeys())
一般情况下,我更倾向于使用注释方法,因为它在实体级别上更明显,更具可读性。另一方面,程序化方法可用于不在实体中的字段。例如,在一个项目中,我们有用于搜索的隐藏字段(即小写和连接),需要索引,我们使用java代码创建它们。