更新嵌套的MongoDB文档对象

时间:2020-10-30 18:29:07

标签: javascript node.js mongodb mongoose discord

您好,那里是一个快速的MongoDB,其中包含一些Discord知识问题:

因此,目前,我希望我的MongoDB文档的格式类似于以下内容:

channels: {
    utility:{
        suggestions: String
    },
    logging: {
        main: String,
        channel: {
            channelCreate: String,
            channelDelete: String,
            channelUpdate: String,
        },
        role: {
            roleCreate: String,
            roleDelete: String,
            roleUpdate: String,
        }
}

这将保存频道ID,以便用户确定每个事件的记录位置。我已经在模式中对此进行了设置,一切都很好,但是当我执行findOneAndUpdate时,我不知道如何编辑单个字段。例如,假设我要编辑roleDelete内部的channels.logging.role,我该怎么做?因为在做

await doc.updateOne({channels:{logging:{role:{roleDelete: IDHERE}}}});

它不起作用。实际上,它将所有内容拧紧,并将channels中的所有内容替换为给定的值,那么我将如何实际更新一个值而不弄乱其他所有内容?非常感谢您的关注和参与。

这是使用NodeJS Mongoose NPM软件包btw。

2 个答案:

答案 0 :(得分:0)

您需要使用React Native Debugger运算符。您可以在https://docs.mongodb.com/manual/reference/operator/update/set/index.html

上找到详细信息
Appium

答案 1 :(得分:0)

所以我通过以下操作解决了这个问题:

await doc.updateOne({ 'channels.logging.role.roleDelete': IDHERE}, { new: true, upsert: true, setDefaultsOnInsert: true });

这将更新值(如果存在),并创建它(如果不存在)。使用上述方法在内部使用$set。 (Read more here

请随时问我是否不清楚自己的情况