有没有办法使用 Regex 在 Mongo 上执行 indexOps?

问题描述

我的数据库中有一些具有“动态名称”的集合, 假设我有一些集合存储来自特定国家/地区的动物数据, 因此,在我的数据库 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));

它有效,但似乎效率很低,必须遍历集合才能完成这项工作。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...