Mongoose提供了一种使用autoIndex
选项在app start上自动添加新索引的方法。
但是有一些选项可以删除那些没有定义的冗余索引吗?
例如我手动创建了一个我没有用Mongoose定义的索引,它可以在启动时自动删除吗?
答案 0 :(得分:0)
我最后编写了一个
的脚本对于每个型号:
比较
新模型模式索引model.schema.indexes()
目前存在于db model.collection.indexes()
中
找到冗余索引
(比较由索引keys
,names
和options
完成(包括文本索引的weights
比较))
删除这些冗余索引
model.collection.dropIndex(indexName)
创建新索引
model.ensureIndexes()
架构应该有{ autoIndex: false }
个选项才能使用
同样,当我们在集群环境中运行时,我们需要有锁定机制 获取锁定:
db.collection('dbchangeloglock').findOneAndUpdate(
{ locked: false }, { locked: true }
);
请注意,不建议在生产中使用此自动索引更新,因为:
串联构建的索引可能需要花费大量时间,同时您的应用会瘫痪;
由于开发人员在代码中出错,很容易丢弃重要索引/创建冗余。在shell中创建索引似乎更可靠。