如何更新猫鼬架构内部的数组?

时间:2019-04-20 14:03:01

标签: node.js mongodb express mongoose

如何使用updateOne更新猫鼬模式内的数组?

我的猫鼬模式在我的Node.Js应用程序上有一个模型。 我的架构的一个字段是数组:

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'参数是一个对象,它包含我需要的所有信息,包括一个包含用于guestsNames的所有字符串的数组(我已经检查了参数是否正确地传递给了对象,它们是否正确) 。除guestsNames字段外,所有字段都使用这段代码进行更新。我在做什么错,如何使guestNames数组正确更新?

干杯。

2 个答案:

答案 0 :(得分:1)

您可以像这样直接更新您的阵列

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

您需要使用$ set替换字段的值,请参见此mongoDB $set

答案 1 :(得分:0)

如果可行,请尝试

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});

}