如何使用附加数据更新现有对象

该项目是使用 nodejs 和 mongoose 创建的。我要做的是使用附加数据更新现有模型(在这种情况下是注释)。


这是模型及其方法:


const bugSchema = new Schema({

    title: {

        type: String,

        required: true

    },

    description: {

        type: String,

        required: true

    },

    date: {

        type: String,

        required: true

    },

    time: {

        type: String,

        required: true

    },

    assignedTo: {

        type: String,

        required: true

    },

    assignedBy: {

        type: String,

        required: true

    },

    status: {

        type: String,

        required: true

    },

    priority: {

        type: String,

        required: true

    },

    comments: {

        comment:[

            {

                user:{

                    type: String,

                    required: true

                },

                content: {

                    type: String,

                    required: true

                }

            }

        ]

    }


});


bugSchema.methods.addComment = function(comment){

    const username = comment.user;

    const content = comment.content;

    console.log(comment);

    const updatedComments = [...this.comments];

    updatedComments.push({

       user : username,

       content: content

    });

    this.comments = updatedComments;

    return this.save();


};


控制器,它从表单传递信息:


exports.postComment =  (req,res,next) =>{

    const bugId = req.body.bugID;

    const name = req.session.user.fullName;

    const content = req.body.content;

    const prod = {name, content};


    Bug.findById(bugId).then(bug =>{

        return bug.addComment(prod);

    })

        .then(result =>{

            console.log(result);

        });



};

我收到以下错误:


(node:3508) UnhandledPromiseRejectionWarning: TypeError: this.comments is not iterable


慕神8447489
浏览 146回答 3
3回答

桃花长相依

(node:3508) UnhandledPromiseRejectionWarning: TypeError: this.comments is not iterable该错误表明您正在尝试迭代一种不具有该功能的数据。您可以检查打印类型:console.log(typeof this.comments)甚至,打印整个对象:console.log(this.comments)如您所见,在这两种情况下,您都得到一个对象,而不是列表(您如何看待)所以你可以做两件事:1-可迭代列表this.comments是一个对象,但在该对象中你有你想要的列表,所以只需使用列表。bugSchema.methods.addComment = function(comment){    const username = comment.user;    const content = comment.content;    console.log(comment);    //const updatedComments = [...this.comments];    const updatedComments = [...this.comments.comment];    updatedComments.push({       user : username,       content: content    });    this.comments = updatedComments;    return this.save();};或者您可以修改架构,使评论成为列表而不是对象2-注释作为架构中的列表将评论属性定义为列表const bugSchema = new Schema({    title: {        type: String,        required: true    },    description: {        type: String,        required: true    },    ...    ...,    comments:[        {            user:{                type: String,                required: true            },            content: {                type: String,                required: true            }        }    ]});然后,尝试按照您的方式对其进行迭代bugSchema.methods.addComment = function(comment){    const username = comment.user;    const content = comment.content;    console.log(comment);    const updatedComments = [...this.comments];    updatedComments.push({       user : username,       content: content    });    this.comments = updatedComments;    return this.save();};

Smart猫小萌

从您的架构注释中,它不是一个数组。您正在尝试将对象传播到数组中。const updatedComments = [...this.comments];还推动阵列上的工作。尝试通过在 bugSchema 之外声明 commentSchema 来修改您的模式定义。const commentSchema = new Schema({     user:{            type: String,            required: true      },      content: {            type: String,            required: true      }})const bugSchema = new Schema({    comments: {    type: [commentSchema]  }})Bug.findByIdAndUpdate(bugId, {$push: {comments: newComment}})

婷婷同学_

我不确定,但评论是一个对象而不是数组,所以你不能使用 [...this.comments] 推送,我认为这是你想要推送的评论?const updatedComments = [...this.comment];updatedComments.push({   user : username,   content: content});this.comment = updatedComments;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript