我想在我的Mongoose数组中附加一个值,但我的数组似乎永远不会更新。我做了以下事情:
在我的控制器中,我将eventName附加到数组eventsAttending
中,如下所示:
$scope.currentUser.eventsAttending.push(event.eventName);
$http.put('/api/users/' + $scope.currentUser._id, $scope.currentUser)
.success(function(data){
console.log("Success. User " + $scope.currentUser.name);
});
我尝试像这样更新数组:
// Updates an existing event in the DB.
exports.update = function(req, res) {
if(req.body._id) { delete req.body._id; }
User.findById(req.params.id, function (err, user) {
if (err) { return handleError(res, err); }
if(!user) { return res.send(404); }
user.markModified('req.body.eventsAttending');
user.save(function (err) {
if (err) { return handleError(res, err);}
return res.json(200, user);
});
});
};
但我的阵列似乎永远不会更新。我还尝试过以下方法:
// Updates an existing event in the DB.
exports.update = function(req, res) {
if(req.body._id) { delete req.body._id; }
User.findById(req.params.id, function (err, user) {
if (err) { return handleError(res, err); }
if(!user) { return res.send(404); }
var updated = _.merge(user, req.body);
updated.markModified('eventsAttending');
updated.save(function (err) {
if (err) { return handleError(res, err);}
return res.json(200, user);
});
});
};
使用这种方法,我的数组正确更新,但是当我尝试在一次后执行http put时,我收到错误Error: { [VersionError: No matching document found.] message: 'No matching document found.', name: 'VersionError' }
这是我的UserSchema:
var UserSchema = new Schema({
name: String,
username: String,
eventsAttending: [{ type: String, ref: 'Event'}],
});
如果有人可以提供帮助,那将非常感激。
答案 0 :(得分:0)
我的猜测是从_.merge返回的对象不再是Mongoose模型,并且某些信息在变换中丢失了。我会尝试手动设置来自请求的所有字段,并使用events.attending.push()
添加到数组,然后保存更新的对象,看看会发生什么。
您使用markModified的第一个示例看起来不对。查看文档时,它应该是已修改字段的名称,并且您似乎已为其提供源位置。
user.markModified('user.eventsAttending')
但是,如果使用push方法,则不需要这样做,因为Mongoose会覆盖内置数组函数来跟踪更改。