我正在使用sequelize ORM从PSQL DB中获取数据。但是,当我检索某些内容时,会给出一大堆数据。我想要的唯一数据是'dataValues'。当然,我可以使用object.dataValues。但是,还有其他好的解决方案吗?
我正在使用Sequelize 4.10
答案 0 :(得分:18)
是的,你可以
Model.findAll({
raw: true,
//Other parameters
});
只会返回数据,而不会返回模型实例
答案 1 :(得分:10)
Sequelize在包含元数据的虚拟对象中包装它的所有返回值。如果您有一个对象而您只想要未修饰的数据值,则可以像这样解开它们:
.toJSON
此外,如果您只想打印对象,可以使用Model.findById(1).then(data => {
console.log(data.toJSON());
});
方法。
mx.sym.Convolution
答案 2 :(得分:1)
只有在使用以下方式登录时才会出现问题:
的console.log(Model.findAll());
如果我将其保存到变量,我可以直接访问其中的对象而不使用“ dataValues ”
答案 3 :(得分:1)
要弄清Masoud Tavakkoli的答案(在该github答案上尚不清楚):使用element.get({ plain: true })
返回带有每个属性key:value对的对象数组。
如果只希望使用一个特定属性值(例如,用户ID)的数组而不是对象,则可以使用以下内容:
const users = await User.findAll({
attributes: ["id"],
where: {} // Your filters here
}).map(u => u.get("id")) // [1,2,3]
Nika Kasradze的答案实际上取得了与中间步骤相同的结果;使用JSON字符串生成器生成相同的数组输出。可能这比映射要快,但我不确定。
const users = await User.findAll({
attributes: ["id"],
where: {} // Your filters here
})
const userIds = JSON.stringify(users)) // [1,2,3]
答案 4 :(得分:0)
最后,经过大量搜索,我找到了答案。你应该做这样的事情
const users = await db.users.findAll({})
.map(el => el.get({ plain: true })) // add this line to code
来源:github issue
答案 5 :(得分:0)
对于嵌套实体,这种愚蠢的解决方法对我有用:
let row = await Model.findOne({
include: [ /*your includes here*/ ]
});
row = JSON.parse( JSON.stringify(row, null, 4) );
以某种方式JSON.stringify(row, null, 4)
删除了所有多余的东西,并假装对象的dataValues
属性是对象本身。然后JSON.parse(...)
将对象放回原处。
编辑:
显然,我是TypeScript的新手,所以我根本不需要它。 console.log(row)
印刷的巨大物体让我感到困惑。我想念很好的c#次:'(
答案 6 :(得分:0)
我就是这样解决的
let rows = await database.Book.findAll(options);
rows = JSON.stringify(rows);
rows = JSON.parse(rows);
请注意,查询包含“include childModel”,如果它只是一个模型,我可以使用“raw:true”。对结果进行字符串化会清除 '_previousDataValues' 等并为您提供普通对象,现在将字符串化的对象解析回 json。我花了很长时间才弄明白。
答案 7 :(得分:-2)