我的数据库中有一些具有“动态名称”的集合,假设我有一些存储来自特定国家/地区的动物数据的集合,所以在我的数据库中Animals
我将有以下集合:
- 澳大利亚-动物
- 日本-动物
- 巴西-动物
有时我需要将新的集合添加到我的数据库中,目前我有一个脚本可以向国家/地区添加索引,例如:
public class CreateIndexForAnimalSpecies {
@ChangeSet(order = "1", id = "CreateIndexForAnimalSpecies", author = "Foo Bar")
public void createIndexForAnimalSpecies(final MongockTemplate template)
IndexOperations idx = mongockTemplate.indexOps("Australia-Animals");
Index index = new Index().named("specieIndex").on("specie", Direction.ASC).background();
idx.ensureIndex(index);
}
基本上这个类的工作是为命名的集合创建索引,Australia-Animals
但将来如果我添加一个带有新国家前缀的新集合,我将不得不复制整段代码并更改集合的名称字符串。我尝试使用 *, $, %, 作为正则表达式,但它们都不起作用。除了获取集合名称并添加到列表中,还有其他方法contains("name")
吗?
我很难做到:
Set<String> collections = mongockTemplate.getCollectionNames();
// Convert to a List<String>
for(String c: collections){
if(c.contains("-Animals"){
otherList.add(c);
}
}
otherList.forEach(item -> scriptToCreateIndex(item));
它可以工作,但似乎效率很低,必须遍历集合才能完成这项工作。