Я получил простой проект Nodejs / Mongodb со схемой дифференциалов, но когда я пытаюсь обновить свойство внутри вложенного документа, mongodb не обновляет базу данных.
Группа схем:
const GroupSchema = new Schema({
settings: {
type: Schema.ObjectId,
ref: 'groupSettings',
required: true,
}
});
const Group = mongoose.model('groups', GroupSchema);
Настройки группы схем:
const GroupSettingSchema = new Schema({
currency: {
type: String,
required: true,
default:'cad'
},
});
const GroupSetting = mongoose.model('groupSettings', GroupSettingSchema);
Express.js Функция маршрута:
let group = await Group.findById(id).populate('settings').exec()
.catch(err => {
return sendError(res, DatabaseFindError, err)
})
if (!group) {
return sendError(res, NotFoundError)
}
//HERE group.settings == old value
//change property send by the body
Object.keys(req.body.settings).forEach(key => {
let value = req.body.settings[key];
if (isDefined(group.settings[key])) {
//only modify if keys exist
//THIS WORK
group.settings.set(key, value);
}
});
//HERE group.settings == new value
await group.save()//DB IS NEVER UPDATED
.catch(err => {
return sendError(res, DatabaseSaveError, err)
})
return sendSuccess(res, {
settings: group.settings// THIS RETURN NEW VALUE
})
Режим отладки Mongoose DB True Log:
Mongoose: users.findOne({ _id: ObjectId("5bc4e6e2f37badaaeaa1ef9d") }, { projection: {} })
Mongoose: groups.findOne({ _id: ObjectId("5bca88c9ec9c9583c7bf0c86") }, { projection: {} })
Mongoose: groupsettings.find({ _id: { '$in': [ ObjectId("5bca88c8ec9c9583c7bf0c82") ] } }, { projection: {} })
::ffff:127.0.0.1 - - [22/Oct/2018:17:18:18 +0000] "POST /api/groups/5bca88c9ec9c9583c7bf0c86/modify/settings HTTP/1.1" 200 63 "http://localhost:3000/admin/groups/5bca88c9ec9c9583c7bf0c86/settings" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
Итак, Mongooseдаже не выполнить .save?
Почему?
Спасибо, дайте мне знать, если вам нужно больше деталей.