2012-10-22 110 views
8

我需要爲MongoDB數據庫創建幾個部署腳本,比如數據遷移和固定裝置,並且我找不到有關如何使用Mongoose API刪除索引的足夠信息。推薦使用Mongoose刪除索引的方法是什麼?

要刪除指定集合的​​所有索引:使用官方MongoDB的API時,這是非常直接的

db.collection.dropIndexes();

不過,我想用貓鼬,這和我試圖用從this post改編executeDbCommand,但沒有成功:

mongoose.connection.db.executeDbCommand({ dropIndexes: collectionName, index: '*' }, 
    function(err, result) { /* ... */ }); 

我應該使用OFFIC用於Node.js的ial MongoDB API或者我錯過了這個方法中的一些東西?

+0

運行executeDbCommand代碼時是否出現錯誤?你的語法看起來有點不對,如果你運行executeDbCommand({dropIndexes:collectionName,index:'*'},function(err,result){...}); ?我相信正確的語法是將完整的命令用大括號括起來,然後是函數。 – Louisa

回答

20

要通過貓鼬模型的收集做到這一點,你可以調用本地收集的dropAllIndexes

MyModel.collection.dropAllIndexes(function (err, results) { 
    // Handle errors 
}); 

更新

dropAllIndexes在2.x版已過時原生驅動程序,應該用dropIndexes代替:

MyModel.collection.dropIndexes(function (err, results) { 
    // Handle errors 
}); 
1

它看起來像你試圖刪除給定集合上的所有索引。根據MongoDB文檔,this is the correct command

...我試圖用executeDbCommand改編自這個職位,但沒有成功:

真正幫助在這裏,我們需要更多的細節:

  • 什麼失敗了?你如何衡量「不成功」?
  • 你能確認100%該命令是否運行?你輸出到回調中的日誌了嗎?你檢查了err變量嗎?
  • 你在哪裏創建索引?你可以確認你沒有在丟棄後重新創建它們嗎?
  • 在列出特定索引名稱時,您是否嘗試過該命令?老實說,你不應該使用"*"。你應該刪除並創建非常具體的索引。
+0

「不成功」我的意思是代碼執行沒有任何錯誤,但我提供的回調從未被調用過。我在一個小腳本中遇到了這個問題,它的唯一職責是刪除並創建某些集合,包括它們的關聯索引,並用測試所需的一些數據填充這些集合。 – npclaudiu

相關問題