簡體   English   中英

更新嵌套的 MongoDB 文檔對象

[英]Updating nested MongoDB document object

你好,一個快速的 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我不知道如何編輯單個字段; 例如,假設我想編輯位於channels.logging.role roleDelete ,我該怎么做? 因為做

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

這是行不通的。 事實上,它將所有內容都搞砸了,並將channels內的所有內容替換為給定的值,那么我如何在不弄亂其他所有內容的情況下實際更新 ONE 值呢? 非常感謝您的關注和參與。

這是使用 NodeJS Mongoose NPM 包順便說一句。

您需要使用$set運算符。 您可以在https://docs.mongodb.com/manual/reference/operator/update/set/index.html上找到詳細信息

doc.updateOne({ _id: ID }, {
        $set: {
            channels.logging.role.roleDelete: IDHERE
        }
}

所以我通過執行以下操作解決了這個問題:

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

如果存在則更新該值,如果不存在則創建它。 使用上述方法$set內部使用$set 在這里閱讀更多

隨意問我是否沒有說清楚

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM