У меня есть следующие схемы:обновление встроенного суб документы - Mongoose
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?
Решение предлагает объявить дочерние схемы перед родительскими схемами, что имеет место в моей ситуации.
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
Спасибо.
Удалите 'lean()' из цепочки вызовов 'findOne'. Вам нужен полный экземпляр модели, если вы хотите сохранить изменения в документе. – JohnnyHK