在Sequelize Model.create上设置raw = true

时间:2017-08-08 08:57:26

标签: node.js orm sequelize.js

我希望能够在Sequelize上调用{raw: true}之后接收普通原始对象,该对象本身是创建的,没有元数据或任何其他东西。就像Model.find中的Model.create({name: 'test'}, {raw: true})选项一样。

我已经看到了这个答案: Setting all queries to raw = true sequelize, 不,plt.gca().set_prop_cycle('color', ["blue"]) 不起作用。

由于

3 个答案:

答案 0 :(得分:10)

非常感谢你的帮助。我找到了一个解决方案,虽然这不是我正在寻找的,但它有效,而且还很好。

sequelize实体有一个.get()方法来返回普通对象版本。所以它是这样的:

Model.create(modelObject)
.then((resultEntity) => {
    const dataObj = resultEntity.get({plain:true})
}

来自这个帖子:Sequelize, convert entity to plain object。寻找CharlesA的答案。

没有尝试使用数组,但如果您遇到结果数组问题,请检查其注释及其旁边的答案。 但由于.create()只返回一个对象,它对我有用。无论如何,如果您使用.findAll(),您应该使用{raw: true}选项而不是此解决方案,因为它适用于该方法。

P.S。如果有人仍然有一个解决方案,其中Sequelize本身不会返回那个大的resultEntity对象,而只是简单的数据对象,就像{raw: true}选项一样(因为我觉得它仍然更轻?),我们打开了。

非常感谢。

答案 1 :(得分:1)

Model.create(modelObject)
.then((resultEntity) => {
    const dataObj = resultEntity.get({plain:true})
}

就像之前提到的,或者如果您想保持异步/等待语法,请尝试:

const myResultVar = (await Model.create(modelObject)).get({plain:true})

基本上相同的事情只是不将async / await语法放在后面:)

答案 2 :(得分:0)

您还可以对从查询返回的模型实例使用.toJSON()。 http://docs.sequelizejs.com/class/lib/model.js~Model.html#instance-method-toJSON