【发布时间】:2014-11-28 18:37:25
【问题描述】:
我有以下架构:
var reviewSchema = new mongoose.Schema({
comments : String,
rating : String,
submitted_date: {type: Date, default: Date.now},
numAgreed : Number,
numDisagreed : Number
});
var userSchema = new mongoose.Schema({
firstName : String,
lastName : String,
numRatings : Number,
averageRating: Number,
reviews : [reviewSchema]
});
我正在为每条评论实现一个同意功能(增加同意评论的人数),如下所示:
exports.processAgree = function(req,res){
var firstName = req.body.firstName;
var lastName = req.body.lastName;
var index = req.body.index;
User.findOne({firstName:firstName,lastName:lastName}).lean().exec(function(err,user) {
if (err) {
throw err;
}
else{
user.reviews[index].numAgreed++;
user.markModified('reviews');
user.save(function (err) {
if (err) throw err;
});
}
});
};
但是,我得到了错误:
reviewedUser.markModified('reviews');
^
TypeError: Object #<Object> has no method 'markModified'
我搜索了 stackoveflow 并看到了对此问题的响应,但它们不适用于我的情况。例如。 How to update an embedded document within an embedded document in mongoose?有回复
解决方案建议在父模式之前声明子模式,我的情况就是这种情况。
如果需要更多信息来提供帮助,请告诉我。
谢谢。
【问题讨论】:
-
从您的
findOne调用链中删除lean()。如果要保存对文档的更改,则需要一个完整的模型实例。