尝试解决由于循环并推送到数组而导致的'ParallelSaveError'。使用Mongoose和Mongo
我能够找到父级,甚至能够开始将数据保存到本地数据库,然后它给了我'ParallelSaveError'。我试过将.save移到循环后,由于范围没有任何反应。我不确定如何解决此错误。
.then(shiftInfo => {
let month = moment().month() + 1,
day = moment().date(),
year = moment().year(),
today = year+"-"+month+"-"+day;
CSshift.findOneAndUpdate({date: today}, ({
date: today,
shift: shiftInfo[0].thisShift[0].label,
color: shiftInfo[0].thisShift[0].color
}), {upsert: true},
function (err, shift){
// console.log(" Today is "+shift.shift)
});
// items.forEach(function(item){
// copy.push(item);
var persons = shiftInfo[1].persons
persons.forEach(function(person){ //THIS IS THE LOOP THAT CAUSES THE PROBLEM
// console.log(person.name);
CSshift.findOne({date: today},function(err, date){
if(err){
console.log(err);
} else {
csshift.roster.push({ //I AM TRYING TO PUSH EACH PERSON TO THE DB UNDER CSSHIFT>ROSTER
name: person.name,
position: person.position,
station: person.station
});
csshift.save(function(err, roster){ //I HAVE MOVED THIS SEGMENT OUT OF THE LOOP W/O SUCCESS.
if(err){
console.log(err);
} else {
// console.log(roster);
}
})
}
})
});
我也曾尝试在这里阅读类似的问题,但尝试阅读我的书并没有成功。
感谢您愿意提供帮助的人。
-亚当
回答如下:因此,在尝试了许多不同的东西之后,我终于弄清楚了。
而不是使用for循环,我使用了for循环(我更喜欢它),然后将循环移动到find语句内,然后将.save放置在循环之外,但在find语句内。
有效:
.then(shiftInfo => {
let month = moment().month() + 1,
day = moment().date(),
year = moment().year(),
today = year+"-"+month+"-"+day;
var persons = shiftInfo[1].persons
CSshift.findOneAndUpdate({date: today}, ({
date: today,
shift: shiftInfo[0].thisShift[0].label,
color: shiftInfo[0].thisShift[0].color,
}), {upsert: true},
function (err, shift){
});
CSshift.findOne({date: today}, function(err, shift){
for(var i=0; i < persons.length; i++){
csshift.roster.push({name: persons[i].name, position: persons[i].position, station: persons[i].station})
}
csshift.save(function(err, roster){
if(err){
console.log(err);
} else {
// console.log(roster);
}
})
});
现在可以正确地将数据推送到数据库。