简体   繁体   English

Mongodb文档保存不适用于嵌套模式

[英]Mongodb document saving don't work with nested Schema

I got a simple Nodejs/Mongodb project with differents schema, but when I try to update a property inside a Nested Document, mongodb don't update the database. 我有一个简单的Nodejs / Mongodb项目,该项目具有差异模式,但是当我尝试更新嵌套文档中的属性时,mongodb不会更新数据库。

Schema Group: 架构组:

const GroupSchema = new Schema({
    settings: {
        type: Schema.ObjectId,
        ref: 'groupSettings',
        required: true,
    }
});

const Group = mongoose.model('groups', GroupSchema);

Schema Group Settings: 架构组设置:

const GroupSettingSchema = new Schema({
currency: {
    type: String,
    required: true,
    default:'cad'
},
});

const GroupSetting = mongoose.model('groupSettings', GroupSettingSchema);

Express.js Route function: 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 Debug Mode True Log: 猫鼬DB调试模式真实日志:

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"

So Mongoose don't even execute the .save ? 所以猫鼬甚至不执行.save吗?

Why ? 为什么呢

Thanks, let me know if you need more details. 谢谢,让我知道您是否需要更多详细信息。

For anyone that has this problem, you need to .save the settings itself after the group has been save so: 对于有此问题的任何人,您都需要在保存组后保存设置本身,以便:

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

After: 后:

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

Thanks 谢谢

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM