排序原始查询TextRow并从中获取数据

时间:2019-06-10 22:05:50

标签: mysql sequelize.js

在此处给出此查询,

        let output = [];
        const sql = `select * from coredb.account LIMIT ${offset},${limit}`;
        let data = await sequelize.query(sql, null, {raw: true, type: sequelize.QueryTypes.SELECT});
        data.forEach((item) => {
            console.log(item['id'], item.id); // <-- output says "undefined, undefined"
        });

data变量在使用console.log检查时确实与右行数据混合在一起。

但是,当我尝试访问各个属性时,它们只会以undefined的形式返回。 Sequelize似乎返回结果的这个TextRow对象似乎不想让我访问然后是显式行。

只是好奇我在这里缺少什么,我是否缺少选择?

3 个答案:

答案 0 :(得分:1)

我同意,Sequalize原始查询不直观。 You don't need nullraw: true标志。这样的事情应该起作用:

let data = await sequelize.query(sql, {type: sequelize.QueryTypes.SELECT});

答案 1 :(得分:0)

当我尝试此操作时,“数据”是两个对象组成的数组,每个对象都是查询结果。因此,可以使用索引[0]来访问属性。...例如

data[0].forEach((item) => {
   console.log(item['id'], item.id); // <-- output says "undefined, undefined"
});

不确定为什么会发生这种情况!

EDIT-这是因为.query()应该只有两个参数。将调用更改为:sequelize.query(sql, {raw: true, type: sequelize.QueryTypes.SELECT})导致数据成为单个数组(符合预期)。

答案 2 :(得分:0)

最后,我能够找到解决方案。 您只需要创建一个新的数组并将数据推入该数组中,就可以像这样找到键名: 假设我们在学生对象中有数据:

    let finalArray = new Array();
    for (var k in students ) {
      finalArray.push(students[k])
    }

 console.log(finalArray) // Normal JSON array object :)
相关问题