在下面的代碼中,我嘗試用一些測試數據填充我的開發數據庫。我想先刪除所有文件,然後添加新的測試者:奇怪的貓鼬行爲 - 文檔不會保存到DB
var mongoose = require('mongoose')
, Plan = mongoose.model('Plan')
, Async = require('async')
Async.series([
function(callback){
// delete all records
Plan.find(function(err,docs){
for (d in docs)
Plan.remove(d, function(err) {
if (err) console.log("error removing records " + err)
});
});
callback();
},
function(callback){
var planArray = [
{title: 'Plan A', body: 'Restaurant Financial Plan'},
{title: 'Plan B', body: 'Coffeeshop Financial Plan'},
{title: 'Plan C', body: 'bar Financial Plan'}
]
var arrayLength = planArray.length;
for (var i = 0; i < arrayLength; i++) {
var p = new Plan(planArray[i])
p.save(function(err, saved){
if (err)
{console.log("error creating fixture " + err)}
else {
console.log(saved)
}
})
}
callback();
}
])
有趣的(奇怪)的行爲是這樣的: - 代碼運行,並刪除所有文件,但不增加新的測試者。 - 控制檯上沒有錯誤,console.log(已保存)成功地將每個新文檔打印到控制檯。 - 如果我刪除第一個異步功能(刪除所有記錄) - 那麼新文檔將保存到數據庫中。
貓鼬怪癖或我對異步流程的誤解..?
豪爾赫,這完美的作品。也是 - 您無需重複刪除所有文檔即可.remove {}。我的問題 - 這在貓鼬文檔中沒有記錄。你是怎麼找到這個的? – NightOwl
太棒了!至於'.remove({})',你是對的 - 它只是在模型概述中間接地提到http://mongoosejs.com/docs/models.html。 「.remove」調用中的第一個參數指定將刪除哪些文檔。貓鼬會刪除所有符合這些條件的*。這也是MongoDB中本地'.remove()'函數的行爲。 –