Mongoose删除冗余索引

时间:2018-02-19 05:29:13

标签: mongodb mongoose

Mongoose提供了一种使用autoIndex选项在app start上自动添加新索引的方法。

但是有一些选项可以删除那些没有定义的冗余索引吗?

例如我手动创建了一个我没有用Mongoose定义的索引,它可以在启动时自动删除吗?

1 个答案:

答案 0 :(得分:0)

我最后编写了一个

的脚本

对于每个型号:

  1. 比较
    新模型模式索引model.schema.indexes()
    目前存在于db model.collection.indexes()中 找到冗余索引 (比较由索引keysnamesoptions完成(包括文本索引的weights比较))

  2. 删除这些冗余索引
    model.collection.dropIndex(indexName)

  3. 创建新索引
    model.ensureIndexes()
    架构应该有{ autoIndex: false }个选项才能使用

  4. 同样,当我们在集群环境中运行时,我们需要有锁定机制 获取锁定:

    db.collection('dbchangeloglock').findOneAndUpdate(
      { locked: false }, { locked: true }
    );
    

    请注意,不建议在生产中使用此自动索引更新,因为:

    • 串联构建的索引可能需要花费大量时间,同时您的应用会瘫痪;

    • 由于开发人员在代码中出错,很容易丢弃重要索引/创建冗余。在shell中创建索引似乎更可靠。