在 Sequelize Model.create 上设置 raw = true
Posted
技术标签:
【中文标题】在 Sequelize Model.create 上设置 raw = true【英文标题】:Set raw = true on Sequelize Model.create 【发布时间】:2018-01-15 18:13:22 【问题描述】:我希望在 Sequelize 上调用 Model.create
后能够接收普通的原始对象,即创建的对象本身,没有元数据或任何其他内容。就像Model.find
中的raw: true
选项一样。
我已经看到了这个答案:
Setting all queries to raw = true sequelize,
不,Model.create(name: 'test', raw: true)
不起作用。
谢谢
【问题讨论】:
使用model.toObject
函数:http://mongoosejs.com/docs/api.html#document_Document-toObject
谢谢你。但那是针对猫鼬的,但我找到了一种类似的方法来续集model.get
,我将其发布为答案。谢谢
【参考方案1】:
我来得太晚了,但也许这会帮助其他人像我一样搜索这个。
在您的查询选项中,而不是
raw: true
试试
plain: true
为我工作
我认为这也是一个选项,您可以将其传递给与数据库的 sequelize 连接,以便让您以普通/原始的形式返回:
类似的东西:
.... new Sequelize('dbUrl',query:raw:true, plain:true, logging: false);
干杯!
【讨论】:
【参考方案2】:Model.create(modelObject)
.then((resultEntity) =>
const dataObj = resultEntity.get(plain:true)
如前所述,或者如果您想使用 async/await 语法,请使用:
const myResultVar = (await Model.create(modelObject)).get(plain:true)
基本上是一样的,只是没有留下 async/await 语法:)
【讨论】:
嗨 :) 您不需要重复其他答案。您的替代选项足以单独编写为答案。【参考方案3】:您还可以对从查询返回的模型实例使用 .toJSON()。 http://docs.sequelizejs.com/class/lib/model.js~Model.html#instance-method-toJSON
【讨论】:
感谢 Kevin,找到内置解决方案,并作为答案发布 我注意到.toJSON()
返回整个对象?你知道如何将它与attributes
配对以过滤返回的内容吗?【参考方案4】:
非常感谢您的帮助。我找到了一个解决方案,虽然这不是我想要的,但它有效,而且仍然很好。
sequelize 实体有一个.get()
方法来返回纯对象版本。所以它是这样的:
Model.create(modelObject)
.then((resultEntity) =>
const dataObj = resultEntity.get(plain:true)
来自此线程:Sequelize, convert entity to plain object。寻找 CharlesA 的答案。
尚未尝试使用数组,但如果您对结果数组有疑问,请检查其 cmets 及其旁边的答案。
但由于.create()
只返回一个对象,它对我有用。无论如何,如果您使用.findAll()
,则应使用raw: true
选项而不是此解决方案,因为它适用于该方法。
附:如果有人仍然有一个解决方案,其中 Sequelize 本身不会返回那个大的 resultEntity 对象,而只是简单的数据对象,就像 raw: true
选项一样(因为我认为这仍然更轻?),我们是开放的。
非常感谢。
【讨论】:
为什么 Sequelize 不实现 raw: true 来创建?!以上是关于在 Sequelize Model.create 上设置 raw = true的主要内容,如果未能解决你的问题,请参考以下文章
Django - 覆盖 Model.create() 方法?
传递文档数组时,Mongoose 中 Model.create 的原子性
传递文档数组时,Mongoose 中 Model.create 的原子性
MongooseJS - 具有现有引用的Model.create