在此处给出此查询,
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
对象似乎不想让我访问然后是显式行。
只是好奇我在这里缺少什么,我是否缺少选择?
答案 0 :(得分:1)
我同意,Sequalize原始查询不直观。 You don't need null
或raw: 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 :)