将默认排序规则添加到现有mongodb集合

时间:2017-06-21 17:02:12

标签: mongodb

我试图为我的mongodb集合添加默认排序规则。使用排序规则创建新集合非常简单:

int compareTo(RestaurantExperience r1, RestaurantExperience r2) {
      if(r1.isTasty() == r2.isTasty()){
          return Long.compare(r1.getTimestamp(), r2.getTimestamp())
      else
          return r1.isTasty() ? 1 : -1;
}

不幸的是,我查看了文档并且没有看到任何Background函数。如何在不破坏和重新创建新集合中的所有文档的情况下添加排序规则?

2 个答案:

答案 0 :(得分:7)

来自collation规范,

  

在服务器版本3.4的初始发布之后,许多用户会想要   将Collat​​ions应用于现有集合的所有操作。这样   用户必须为每个操作提供Collat​​ion选项   明确;但是,最终大多数用户都希望使用   对集合的所有操作的排序将创建集合   服务器端默认值。我们现在选择支持用户详细程度   过度抽象这一特征是为了获得短期收益。

所以你知道它还不是一个选择。

答案 1 :(得分:5)

还有一个其他选项可以满足我的生产需求:对集合执行mongodump

mongodump --host hostname --port 32017 --username usr --password pwd --out c:\backup --db my_database --collection my_collection

这将生成两个文件,其中一个名为my_collection.metadata.json。打开此文件,然后根据MongoDB docs修改options属性。

{
    "options": {
        "collation": {
            "locale": "en",
            "strength": 1
        }       
    }
    ...
}

然后使用mongorestore

恢复
mongorestore --host hostname --port 32017 --username usr --password pwd --db contactstore c:\backup\my_database --drop

从那时起,默认情况下,您创建的任何索引都将使用该特定的排序规则。不幸的是,这需要停机时间窗口,因此请确保您有一个停机窗口。