以下是我尝试运行的代码: -
poolModel
.find({})
.exec(function (err, pools) {
if(err)
return next(new customError.Database(err.toString()));
for(var i=0; i<pools.length; i++)
{
pools[i].views = 31;
console.log(pools[i]._id);
var pool_id = pools[i]._id;
poolModel.findByIdAndUpdate(pool_id, pools[i], function(err, pool){
if(err)
console.log(err);
else
console.log(pool.views+'');
});
/* poolModel.findByIdAndUpdate(ObjectId(pools[i]._id), pools[i], function(err, pool){
if(err)
return next(new customError.Database(err.toString()));
console.log(pool.views);
})*/
}
})
我的模型类中也有视图条目。 但我一直收到这个错误: - [TypeError:无法读取属性&#39; _id&#39;未定义的]
答案 0 :(得分:1)
findByIdAndUpdate()是异步调用,将其置于常规for循环中将无法正常工作。它需要在异步循环中,其中一种方法是使用async.each()或async.eachSeries():
var async = require('async');
:
:
async.each(pools, function(item, callback) {
var pool_id = item._id;
item.views = 31;
console.log(pool_id);
poolModel.findByIdAndUpdate(pool_id, item, function(err, pool){
if(err)
console.log(err);
else
console.log(pool.views+'');
callback(null);
});
}, function(err) {
console.log('all done');
});
答案 1 :(得分:1)
您不能将完整的Mongoose模型实例用作findByIdAndUpdate
更新参数,而是通过将pools[i]
传递给该方法而尝试执行的操作调用
相反,修改pools[i]
后,请调用其save
方法:
for(var i=0; i<pools.length; i++)
{
pools[i].views = 31;
pools[i].save(function(err, pool){
if(err)
console.log(err);
else
console.log(pool.views+'');
}
}