在下面的代码中,我尝试用一些测试数据填充我的开发数据库。我想先删除所有文件,然后添加新的测试者:奇怪的猫鼬行为 - 文档不会保存到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()'函数的行为。 –