我需要为MongoDB数据库创建几个部署脚本,如数据迁移和fixture,我找不到有关如何使用Mongoose API删除索引的足够信息。使用官方MongoDB API时,这非常简单:
删除指定集合上的所有索引:
db.collection.dropIndexes();
但是,我想使用Mongoose,我尝试使用从this post改编的executeDbCommand
,但没有成功:
mongoose.connection.db.executeDbCommand({ dropIndexes: collectionName, index: '*' },
function(err, result) { /* ... */ });
我是否应该使用官方的MongoDB API for Node.js,或者我错过了这种方法的一些内容?
答案 0 :(得分:23)
要通过集合的Mongoose模型执行此操作,您可以调用本机集合的dropAllIndexes
:
MyModel.collection.dropAllIndexes(function (err, results) {
// Handle errors
});
<强>更新强>
2.x版本的本机驱动程序中不推荐使用 dropAllIndexes
,因此应使用dropIndexes
代替:
MyModel.collection.dropIndexes(function (err, results) {
// Handle errors
});
答案 1 :(得分:1)
看起来您正在尝试删除给定集合上的所有索引。
根据MongoDB文档,this is the correct command。
...我尝试使用从这篇文章改编的executeDbCommand,但没有成功:
要真正提供帮助,我们需要更多详细信息:
err
变量吗?"*"
。您应该删除并创建非常具体的索引。答案 2 :(得分:0)
如果要使用mongoose维护模式定义中的索引(如果使用mongoose,则可能需要这样做),可以轻松删除不再使用的索引,并创建尚不存在的索引。您只需在await YourModel.syncIndexes()
上运行一个需要同步的模型即可。它将使用.ensureIndexes
在后台创建一个,并删除模式定义中不再存在的任何内容。您可以在此处查看完整的文档:
https://mongoosejs.com/docs/api.html#model_Model.syncIndexes
答案 3 :(得分:-1)
删除您可以使用的特定索引
db.users.dropIndex("your_index_name_here")