续集-在where子句中使用options.distinct?

时间:2019-05-08 18:08:29

标签: postgresql sequelize.js

我正在尝试使用Sequelize通过带有where子句的查询来查找列中所有不同的字段。我已经搜索了Sequelize文档,并尝试了许多不同的方法,但是还没有找到正确的语法。

这是我当前的语法草案:

var searchResults = connectors.cars.findAll({
    attributes: [
        connectors.Sequelize.options.distinct
    ],
    where: {
        condition: connectors.Sequelize.where(connectors.Sequelize.fn('LOWER', connectors.Sequelize.col('mfgr')), 'LIKE', '%' + searchString + '%')
     }
});

options.distinct子句中使用where的正确方法是什么?

注意:已编辑,删除了注释中要求的一堆额外的代码,但回想起来,这些代码可能使问题变得难以理解。

2 个答案:

答案 0 :(得分:0)

更多的是评论,但是这段代码是怎么回事?

}).then((searchResults) => searchResults.map((item) => item.dataValues));
debugger;
return searchResults; <== ERROR IS THROWN HERE

1)map()的目的地是什么? 2)返回结果是否会在返回结果的之前,因为它不在.then()块中?应该不是这样的吗?

}).then((searchResults) => {
  var new_results = searchResults.map((item) => item.dataValues));
  debugger;
  return new_results;
}

我想念什么吗?

答案 1 :(得分:0)

我得到的印象是,在原始sql中很难做到这一点,更不用说Sequelize了。我发现了an answer that uses raw sql here

const myQuery = "WITH cte AS\n" +
    "(   SELECT id, mfgr, ROW_NUMBER() OVER (PARTITION BY mfgr ORDER BY mfgr DESC) AS rn\n" +
    "    FROM cars\n" +
    "    WHERE LOWER(mfgr) like '%" + searchString + "%'\n" +
    ")\n" +
    "SELECT *\n" +
    "FROM cte\n" +
    "WHERE rn = 1";

let searchResults = connectors.db.query(myQuery);