只从Sequelize ORM获取dataValues

Gij*_*ese 24 node.js sequelize.js sequelize-cli

我正在使用sequelize ORM从PSQL DB中获取数据.但是,当我检索某些内容时,会给出一大堆数据.我想要的唯一数据是'dataValues'.当然,我可以使用object.dataValues.但是,还有其他好的解决方案吗?

我正在使用Sequelize 4.10

Shi*_*vam 41

是的你可以

Model.findAll({
 raw: true,
 //Other parameters
});
Run Code Online (Sandbox Code Playgroud)

只返回数据,而不是模型实例

  • 请注意,这不适用于急切加载嵌套实体. (9认同)
  • 我可以将其应用于全球所有查询吗? (3认同)
  • 您可以在创建连接时定义它。像const sequelize = new Sequelize('connectionUri',{define:{raw:true}});之类的东西。从文档[这里](http://docs.sequelizejs.com/manual/installation/getting-started.html#application-wide-model-options) (3认同)
  • 要应用于所有查询,请使用 https://stackoverflow.com/a/ 中提到的 `var Sequelize = new Sequelize('database', 'username', 'password', {query:{raw:true}})` 26228558/1802726。 (3认同)

C D*_*ter 14

Sequelize将包含元数据的虚拟对象中的所有返回值包装起来.如果你有一个对象而你只想要未修饰的数据值,你可以这样解开它们:

Model.findById(1).then(data => {
  console.log(data.get({ plain: true }));
});
Run Code Online (Sandbox Code Playgroud)

此外,如果您只想打印对象,则可以使用该.toJSON方法.

Model.findById(1).then(data => {
  console.log(data.toJSON());
});
Run Code Online (Sandbox Code Playgroud)


Mas*_*oli 14

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

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

来源:github问题


lil*_*mad 8

这就是我解决我的问题的方法

    let rows = await database.Book.findAll(options);
    rows = JSON.stringify(rows);
    rows = JSON.parse(rows);
Run Code Online (Sandbox Code Playgroud)

请注意,查询具有“include childModel”,如果它只是一个模型,我可以使用“raw:true”。对结果进行字符串化会清除“_previousDataValues”等并为您提供纯对象,现在将字符串化对象解析回 json。我花了很长时间才弄清楚这一点。


def*_*led 7

为了澄清 Masoud Tavakkoli 的答案(在 github 答案上并没有立即明确):使用element.get({ plain: true })返回一个包含每个属性键:值对的对象数组。

如果您只需要一个特定属性值(例如用户 ID)的数组而不是对象,您可以使用如下内容:

const users = await User.findAll({
    attributes: ["id"], 
    where: {} // Your filters here
}).map(u => u.get("id")) // [1,2,3]
Run Code Online (Sandbox Code Playgroud)

Nika Kasradze 的答案实际上达到了与中间步骤相同的结果;使用 JSON 字符串生成器生成相同的数组输出。这可能比映射更快,但我不确定。

const users = await User.findAll({
    attributes: ["id"], 
    where: {} // Your filters here
})
const userIds = JSON.stringify(users)) // [1,2,3]
Run Code Online (Sandbox Code Playgroud)


Gij*_*ese 3

仅当我使用以下方式记录时才会出现该问题:

console.log(Model.findAll());

如果我将其保存到变量中,我可以直接访问内部对象,而无需使用“ dataValues