2014-07-22 52 views
8

我試圖從我的Mongoose數據庫中刪除所有內容,但似乎沒有任何工作。Mongoose Model.remove(回調)不會從我的集合中刪除任何東西

我已經試過

# CoffeeScript 
MyModel.find().remove((err) -> console.log('purge callback')) 

# JavaScript 
MyModel.find().remove(function() { console.log('purge callback') }) 

而且

# CoffeeScript 
MyModel.find().remove({}, (err) -> console.log('purge callback')) 

# JavaScript 
MyModel.find().remove({}, function() { console.log('purge callback') }) 

即使在拆除.find()步驟或添加.exec()我的回調從來沒有顯示我的數據還在這裏。

我敢肯定,我的模型和連接都OK:

  • 我可以看到蒙戈日誌的連接
  • 我可以在別處操縱同一型號

相關文檔添加:How do I remove documents using Node.js Mongoose?

編輯

我的問題是由於沒有顯示的語法錯誤造成的。所選答案確實有效,上面的代碼也是如此。歡迎主持人刪除我的問題,如果有必要的話。

回答

20

它不是由貓鼬返回"query"對象,唯一有效的方法在這裏是.remove()

MyModel.remove(function(err,removed) { 

    // where removed is the count of removed documents 
}); 

這是相同的:

MyModel.remove({}, function(err,removed) { 

}); 

而且,你怎麼確定沒有文件被刪除?可能看錯了收藏。貓鼬默認複數化集合名稱,除非你明確指定的集合名稱,如:

mongoose.Model("MyModel", myModelSchema, "mymodel") 

如果沒有第三個參數或其他指定的集合名稱隱含爲「mymodels」的模式。因此,請檢查您是否擁有正確的集合以及您希望刪除文檔的正確數據庫連接。

+1

正如我所說,我也試過,但它也不起作用。此外,Mongoose文檔示例與您不同意http://mongoosejs.com/docs/api.html#query_Query-remove。還是要謝謝你的幫助。 – AsTeR

+0

@AsTeR它適用於其他人。你不會顯示如上所示的語法,因此你必須做一些不同的事情。 –

+0

我說我刪除了'.find()'步驟。但你說得對,說明顯很重要。我正在通過MongoHub和命令行客戶端查看我的集合。我注意到了添加的「s」技巧... – AsTeR

13

instance.This就是一個例子刪除一個模型卸下襬臂只適用於貓鼬文檔模型的功能:

Model.findOne({ field : 'toto'}, function (err, model) { 
    if (err) { 
     return; 
    } 
    model.remove(function (err) { 
     // if no error, your model is removed 
    }); 
}); 

但是,如果你想刪除與特定查詢的元素,你應該使用功能removefind功能:

Model.remove({ title : 'toto' }, function (err) { 
    // if no error, your models are removed 
}); 
+0

如果找不到模型,節點會拋出錯誤並崩潰 – Mick

相關問題