操纵数据对象sequelize ORM(nodejs)

时间:2018-02-06 18:39:16

标签: node.js express sequelize.js

我的代码如下:

data = await photo.findOne({
    where : {id}
})

返回数据

{
     "a" : 2,
     "b" : 5
}

我想操纵数据,比如插入一些字段

所以我添加了属性:

data.c = data.a * data.b

我在console.log中检查添加的数据

{
     "a" : 2,
     "b" : 5,
     "c" " 10
}

但是当我回到json时

 return res.status(200).json({message: "success", data })

数据仍然是第一个     {          "" :2,          " B" :5     }

2 个答案:

答案 0 :(得分:0)

您遇到问题的原因是

  

Finder方法旨在查询数据库中的数据。它们不返回普通对象,而是返回模型实例。因为finder方法返回模型实例,所以您可以调用结果上的任何模型实例成员,如实例文档中所述。

data.c = data.a * data.b执行此操作时,您基本上 将属性添加到模型实例而不是数据对象

您可以执行类似

的操作
dataInstance = await photo.findOne({
    where : {id}
})
data = dataInstance.get({
   plain: true // Important
})
data.c = data.a * data.b;

干杯。不要忘记验证答案。

答案 1 :(得分:0)

最后,经过大量搜索,我找到了答案。你应该做这样的事情

const users = await db.users.findAll({})
.map(el => el.get({ plain: true })) // add this line to code

源:Github issue