推荐使用Mongoose删除索引的方法是什么?
我需要为MongoDB数据库创build几个部署脚本,比如数据迁移和固定装置,而且我找不到有关如何使用Mongoose API删除索引的足够信息。 使用官方的MongoDB API时,这非常简单:
删除指定集合上的所有索引:
db.collection.dropIndexes();
不过,我想使用Mongoose这个,我试图使用从这篇文章改编的executeDbCommand
,但没有成功:
mongoose.connection.db.executeDbCommand({ dropIndexes: collectionName, index: '*' }, function(err, result) { /* ... */ });
我应该使用Node.js官方的MongoDB API还是错过了这个方法?
要通过集合的Mongoose模型执行此操作,可以调用本地集合的dropAllIndexes
:
MyModel.collection.dropAllIndexes(function (err, results) { // Handle errors });
更新
本机驱动程序的2.x版本中不推荐使用dropAllIndexes
,因此应该使用dropIndexes
:
MyModel.collection.dropIndexes(function (err, results) { // Handle errors });
它看起来像你试图放弃给定集合的所有索引。
根据MongoDB Docs, 这是正确的命令 。
…我试图使用从这篇文章改编的executeDbCommand,但没有成功:
要真正帮到这里,我们需要更多的细节:
- 什么失败了? 你是如何衡量“不成功”的?
- 你能确认100%的命令是否运行? 你输出到callback中的日志? 你检查了
err
variables吗? - 你在哪里创build索引? 你可以确认你不是在丢弃后重新创build它们吗?
- 在列出特定索引名称时,您是否尝试过该命令? 老实说,你不应该使用
"*"
。 你应该删除并创build非常具体的索引。