Сохранение документов Mongodb не работает с вложенной схемой - PullRequest
0 голосов
/ 22 октября 2018

Я получил простой проект 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?

Почему?

Спасибо, дайте мне знать, если вам нужно больше деталей.

1 Ответ

0 голосов
/ 25 октября 2018

Для тех, у кого есть эта проблема, вам нужно. Сохранить настройки после того, как группа была сохранена так:

await group.settings.save()//DB IS NOW UPDATED
    .catch(err => {
        return sendError(res, DatabaseSaveError, err)
    })

После:

await group.save()//DB IS NEVER UPDATED
    .catch(err => {
        return sendError(res, DatabaseSaveError, err)
    })

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...