【问题标题】:How to update an array inside of a mongoose schema?如何更新猫鼬模式中的数组?
【发布时间】:2023-03-04 13:05:01
【问题描述】:

如何使用 updateOne 更新 mongoose 架构中的数组?

我的 Node.Js 应用程序中有一个模型,它是使用 mongoose 模式制作的。 我的架构的字段之一是数组:

guestsNames: []

我已经能够在此数组中保存项目,但我没有找到更新其中项目的方法。

这是我的整个架构:

const screenImageSchema = mongoose.Schema({
    company: {
        type: String,
        require: true,
        trim: true
    },
    guestsNames: [],
    imageName: {
        type: String,
        require: true
    },
    defaultImageName: {
        type: String,
        require: true
    },
    date: {
        type: String,
        default: Date.now,
        require: true
    },
    activated: {
        type: String,
        default: 'Enabled'
    },
    wsType: {
        type: String,
        default: 'Image'
    }
}, {timestamps: true});

...还有我的 updateOne 方法:

screenImageSchema.methods.updateOne = function(id, screenImage) {
    const updatedScreenImage = {
        company: screenImage.company,
        guestsNames: screenImage.guests,
        imageName: screenImage.imageName,
        defaultImageName: screenImage.defaultImageName,
        date: screenImage.date,
        activated: screenImage.activated,
        wsType: screenImage.wsType
    }

    ScreenImage.updateOne(id, updatedScreenImage, {new: true});
}

传递给函数的“screenImage”参数是一个包含我需要的所有信息的对象,包括一个包含所有 guestNames 字符串的数组(我已经检查过参数是否正确传递给对象并且它们是) .除 guestNames 字段外,所有字段都将使用这段代码进行更新。我做错了什么,如何正确更新 guestNames 数组?

干杯。

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    你可以像这样直接更新你的数组

    ScreenImage.updateOne(id, { $set : { guestNames : newArray }})
    

    需要用$set来替换某个字段的值,看这个mongoDB $set

    【讨论】:

    • 嗨@L.Lecherbonnier 你能解释一下为什么你的答案是正确的
    • 谢谢!有效。最后哈哈非常感谢你的帮助@L.Lecherbonnier =)
    【解决方案2】:

    如果可行就试试这个

    screenImageSchema.methods.updateOne = function(id, screenImage) {
    const updatedScreenImage = {
        company: screenImage.company,
        guestsNames[0]: screenImage.guests,
        imageName: screenImage.imageName,
        defaultImageName: screenImage.defaultImageName,
        date: screenImage.date,
        activated: screenImage.activated,
        wsType: screenImage.wsType
    }
    ScreenImage.updateOne(id, updatedScreenImage, {new: true});
    

    }

    【讨论】:

    • 你能提供数组里面的内容吗?任何键值对?
    • 只是取自用户的字符串。没有键值对。
    猜你喜欢
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 2021-12-28
    • 2016-11-09
    • 2020-08-02
    • 2017-04-22
    • 1970-01-01
    • 2017-05-20
    相关资源
    最近更新 更多