【发布时间】:2018-01-31 00:16:41
【问题描述】:
从我的question last week 开始,我得到了异步循环工作,但我遇到了一个新问题。循环创建的文档似乎没有保存到数据库中。然而,它们被推送到父记录中(下面的计划代码),这就是成功保存推送。我在下面包含了完整的路线代码:
// Auto-populate entries
router.post( "/populate", middlewareObj.isLoggedIn, function(req, res){
var orgList=[]
console.log( req.body.orgs);
if (typeof req.body.orgs == 'string') {
orgList = [req.body.orgs]
} else {
orgList = req.body.orgs
};
orgList.save
console.log( orgList)
//lookup Plan using ID
Plan.findById( req.params.id, function(err, foundPlan){
if(err){
console.log( err);
res.redirect("/plans");
} else {
BaseData.find({
"contributingRegion": foundPlan.contributingRegion,
"org": { $in: orgList}
}, function( err, baseData) {
if (err) {
console.log( err)
} else {
console.log( baseData.length);
//Create entries & push into plan
async.each( baseData, function(data, next) {
Entry.create(data, function(err, entry) { /*Create entry*/
if(err) {
next (err);
} else {
// Create other entry variables
entry.author.id = req.user._id;
entry.author.username = req.user.username;
entry.save();
entry.adjHC = entry.initHC;
entry.adjResRate = entry.initResRate;
entry.yr1Resignations = Math.round(entry.adjHC * entry.adjResRate);
entry.yr1Supply = entry.adjHC - entry.yr1Resignations;
entry.yr2Resignations = Math.round(entry.yr1Supply * entry.adjResRate);
entry.yr2Supply = entry.yr1Supply - entry.yr2Resignations;
entry.yr3Resignations = Math.round(entry.yr2Supply * entry.adjResRate);
entry.yr3Supply = entry.yr2Supply - entry.yr3Resignations;
entry.yr4Resignations = Math.round(entry.yr3Supply * entry.adjResRate);
entry.yr4Supply = entry.yr3Supply - entry.yr4Resignations;
entry.yr5Resignations = Math.round(entry.yr4Supply * entry.adjResRate);
entry.yr5Supply = entry.yr4Supply- entry.yr5Resignations;
entry.demandYr0 = entry.adjHC;
entry.demandYr1 = entry.adjHC;
entry.demandYr2 = entry.adjHC;
entry.demandYr3 = entry.adjHC;
entry.demandYr4 = entry.adjHC;
entry.demandYr5 = entry.adjHC;
entry.gapYr1 = entry.yr1Supply - entry.demandYr1;
entry.gapYr2 = entry.yr2Supply - entry.demandYr2;
entry.gapYr3 = entry.yr3Supply - entry.demandYr3;
entry.gapYr4 = entry.yr4Supply - entry.demandYr4;
entry.gapYr5 = entry.yr5Supply - entry.demandYr5;
entry.save();
console.log(entry._id + ' saved')
foundPlan.planEntries.push(entry);
foundPlan.save();
// next iteration
next();
}
}); /*entry Create*/
}, function(err) {
// This function runs when all iterations are done
if (err) throw err;
res.redirect('/plans/' + foundPlan._id);
} ); /*End of Async Loop*/
};
}); /*End of BaseDate.find*/
}
}); /*End of Plan.findById*/
});
从我一直用来进行故障排除的代码中的各种 console.logs 中,我知道代码在 baseData 中找到了正确数量的条目(42 条记录)。
我应该添加相同的 Entry.create 代码用于单独的路由,其中条目由用户手动一个接一个地添加。
当我查看 mongodb 本身以查看我得到的计划中 planEntries 数组的大小时:
// 1) Manually added entry
{ "_id" : ObjectId("5a6f00421046d90019e2c6e8"), "name" : "test", "numEntries" : 1 }
// 2) After First populate route
{ "_id" : ObjectId("5a6f00421046d90019e2c6e8"), "name" : "test", "numEntries" : 46 }
// 3) After a second populate route (same selections)
{ "_id" : ObjectId("5a6f00421046d90019e2c6e8"), "name" : "test", "numEntries" : 239 }
手动添加的条目保存正确,但其他条目似乎没有保存文档。
同样出乎意料的是,在每次自动填充之后,我预计 numEmtries 会增加 42,但它似乎会以更大的数字增长
【问题讨论】:
-
您在
Entry中插入的所有字段是否也在您的Entry模型中? -
是的,所有这些字段都在我的 Entry 模型中。它们都是数字字段,除了 4 作为从 baseData 和作者字段的一部分传入的字段
标签: node.js mongodb mongoose async.js