为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕神8447489 2022-01-13 15:45:04
该项目是使用 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
查看完整描述

3 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

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


};


查看完整回答
反对 回复 2022-01-13
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

从您的架构注释中,它不是一个数组。您正在尝试将对象传播到数组中。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}})



查看完整回答
反对 回复 2022-01-13
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

我不确定,但评论是一个对象而不是数组,所以你不能使用 [...this.comments] 推送,我认为这是你想要推送的评论?


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

updatedComments.push({

   user : username,

   content: content

});

this.comment = updatedComments;


查看完整回答
反对 回复 2022-01-13
  • 3 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信