我正在将AngularJS应用程序转换为Angular 7,它们共享一个后端API。我正在提交相同的数据,并且它正确记录了日志,但是当尝试保存记录时,后端出现有关未知修饰符$ pushAll的错误。
我的控制器代码:
Volunteer
.findById(volunteerId)
.select('shifts')
.exec(function(err, volunteer) {
var thisShift;
var response = {
status : 200,
message : {}
};
if (err) {
console.log("Error finding volunteer request");
response.status = 500;
response.message = err;
} else if(!volunteer) {
console.log("Volunteer request not found", volunteerId);
response.status = 404;
response.message = {
"message" : "Volunteer request not found " + volunteerId
};
} else {
// Get the shift
thisShift = volunteer.shifts.id(shiftId);
console.log("SHIFT BEFORE UPDATE", JSON.stringify(thisShift));
// If the shift doesn't exist Mongoose returns null
if (!thisShift) {
response.status = 404;
response.message = {
"message" : "Shift not found " + shiftId
};
}
}
if (response.status !== 200) {
res
.status(response.status)
.json(response.message);
} else {
thisShift.volleyteers.push({
fullname: user.name,
phone: user.phone,
email: user.username
});
console.log("thisShift to be saved", JSON.stringify(thisShift));
volunteer.save(function(err, volunteerUpdated) {
if (err) {
console.log("ERROR",err);
res
.status(500)
.json(err);
} else {
console.log("SUCCESS!");
res
.status(204)
.json({message: "Thank you for volunteering! You can see where you need to on your profile page or someone will contact you."});
}
});
}
});
};
我得到的错误以及后端上的console.logged内容是:
我正在使用:
如何解决此错误,以便保存更新的记录?
答案 0 :(得分:1)
我遇到了同样的问题。问题是$ pushall函数已被弃用,但某些旧版本的Mongoose仍在使用它。我将Mongoose升级到版本5.6.11(最新版本),问题不再存在。
P / S:如果您使用mongoose-unique-validator插件,也应该对其进行升级(我已升级到2.0.3版)
希望有帮助
答案 1 :(得分:0)
此issue comes to mind。 $pullAll
在MongoDB中已弃用,但在猫鼬的背后被利用。
解决方法似乎是在this之前的版本5.0.0-rc2之前向架构中添加usePushEach: true
。
这段代码似乎是造成这种情况的原因:
thisShift.volleyteers.push({
fullname: user.name,
phone: user.phone,
email: user.username
});
因为您要猫鼬保存对象数组。
猫鼬在幕后不使用的另一种解决方法$pushAll
似乎是尝试使用concat:
thisShift.volleyteers.concat([{
fullname: user.name,
phone: user.phone,
email: user.username
}]);