如何使用 Spring 更新或删除 @CompoundIndex
How to update or drop @CompoundIndex with Spring
我现有的@CompoundIndex 定义如下:
@CompoundIndex(name = "idx_test_search", unique = true,
def = "{type: 1, origin: 1, date: 1}")
现在我需要更改它以添加另一个字段,例如:
@CompoundIndex(name = "idx_test_search", unique = true,
def = "{type: 1, origin: 1, date: 1, travelers: 1}")
我希望它像在应用程序启动时创建的那样自动应用,但在 MongoDb 中它仍然是旧的。我可以用新名称创建一个不同的索引,但我需要删除这个索引。我可以用 @ChangeSet
来做吗?有什么想法吗?
我用 mongoTemplate 和@Changeset 做到了这一点:
@ChangeLog(order = "0.0.1")
public class MongoChangelogVersion_0_0_1 {
@ChangeSet(order = "0001", id = "testSearchIndex", author = "djordje.ivanovic@****.com")
public void dropIndex(MongoTemplate mongoTemplate) throws IOException {
List<IndexInfo> indexes = mongoTemplate.indexOps(TestSearch.class).getIndexInfo();
for(IndexInfo indexInfo: indexes){
if(indexInfo.getName().equals("idx_test_search")){
mongoTemplate.indexOps(TestSearch.class).dropIndex("idx_test_search");
break;
}
}
}
}
mongoTemplate.indexOps(TestSearch.class) 正在返回相关 table 的所有索引的列表(在我的例子中是 TestSearch),所以之后检查索引是否存在,我们将删除它。
我现有的@CompoundIndex 定义如下:
@CompoundIndex(name = "idx_test_search", unique = true,
def = "{type: 1, origin: 1, date: 1}")
现在我需要更改它以添加另一个字段,例如:
@CompoundIndex(name = "idx_test_search", unique = true,
def = "{type: 1, origin: 1, date: 1, travelers: 1}")
我希望它像在应用程序启动时创建的那样自动应用,但在 MongoDb 中它仍然是旧的。我可以用新名称创建一个不同的索引,但我需要删除这个索引。我可以用 @ChangeSet
来做吗?有什么想法吗?
我用 mongoTemplate 和@Changeset 做到了这一点:
@ChangeLog(order = "0.0.1")
public class MongoChangelogVersion_0_0_1 {
@ChangeSet(order = "0001", id = "testSearchIndex", author = "djordje.ivanovic@****.com")
public void dropIndex(MongoTemplate mongoTemplate) throws IOException {
List<IndexInfo> indexes = mongoTemplate.indexOps(TestSearch.class).getIndexInfo();
for(IndexInfo indexInfo: indexes){
if(indexInfo.getName().equals("idx_test_search")){
mongoTemplate.indexOps(TestSearch.class).dropIndex("idx_test_search");
break;
}
}
}
}
mongoTemplate.indexOps(TestSearch.class) 正在返回相关 table 的所有索引的列表(在我的例子中是 TestSearch),所以之后检查索引是否存在,我们将删除它。