sequelize.query()返回两次相同的结果

时间:2015-10-20 08:53:17

标签: json node.js npm sequelize.js

我在nodejs项目中工作,使用sequelize连接mysql数据库。我也使用sequelize-values从Sequelize实例中获取原始数据。

我写了以下代码

var Sequelize = require('sequelize');
require('sequelize-values')(Sequelize);
var sequelizeObj = new Sequelize('mysql://root:@localhost/database');

sequelizeObj.authenticate().then(function (errors) {
    console.log(errors)
});

sequelizeObj.query("SELECT * FROM `reports` WHERE `id` = 1200").then(function (result) {

    });

现在表reports只有id 1200的1条记录,但是result为相同的记录提供了两个对象,意味着两条记录都与id 1200相同。

[ [ { id: 1200,
  productivity_id: 9969,
  gross_percentage_points: 100 } ],
[ { id: 1200,
  productivity_id: 9969,
  gross_percentage_points: 100 } ] ]

让我知道我做错了什么?

4 个答案:

答案 0 :(得分:30)

第一个对象是结果对象,第二个是元数据对象(包含受影响的行等) - 但在mysql中,这两个是相等的。

传递{ type: Sequelize.QueryTypes.SELECT }作为第二个参数将为您提供单个结果对象(省略元数据对象

Liquid gem Readme page

答案 1 :(得分:1)

尝试:

sequelizeObj.query("SELECT * FROM `reports` WHERE `id` = 1200", { type: Sequelize.QueryTypes.SELECT }).then(function (result) {
    });

答案 2 :(得分:0)

添加{ type: Sequelize.QueryTypes.SELECT }作为第二个参数,还要记住先导入Sequelize。

答案 3 :(得分:-1)

已解决

sequelize.query("SELECT ...", { type: Sequelize.SELECT })
.then(result => {
    if (!result ) {
        res.status(404).send({ message: "Data Not found." });
    }

    res.status(200).send(result[0]);

})
.catch(err => {
    res.status(500).send({ message: err.message });
});