1

我有以下代码,假设一些 Sequelize 模型User带有一个findQuery旨在返回单行的模型:

import { from } from 'rxjs';
import sequelize from './database.js'; // Database connection

let sql = "SELECT * FROM users WHERE id = $1";

let searchUser = sequelize.query(sql);
let searchUser$ = from(searchUser);

searchUser$.subscribe(console.log);

我期望它给我的是一个Observable<Array>发出单个数组的结果。

问题

它向我发出一个数组,其中包含两个数组,包含相同的值:

[
   [ {id: "someid", name: "John", age: 12} ],
   [ {id: "someid", name: "John", age: 12} ]
]

期望值

[ {id: "someid", name: "John", age: 12} ]

如何修复我对 sequelize 的使用,使其仅返回一组结果?如何避免其重复结果?

4

1 回答 1

1

出现重复结果的原因是因为Sequelize 同时返回 SQL 查询的结果和元数据结果。在某些情况下,您使用的 SQL 引擎也会将结果作为元数据返回。

您要做的是防止 Sequelize 将元数据返回给您。

Sequelize 模型使用参考

如果您不需要访问元数据,您可以传入查询类型来告诉 sequelize 如何格式化结果。例如,对于一个简单的选择查询,您可以这样做:

sequelize.query("SELECT * FROM `users`", { type: sequelize.QueryTypes.SELECT})
  .then(users => {
    // We don't need spread here, since only 
    // the results will be returned for select queries
  })

TL;DR 如何防止 Sequelize 返回元数据?

除了传递您可能在查询选项中绑定的任何参数之外,还将类型说明符添加到您的查询选项中:

import { from } from 'rxjs';
import sequelize from './database.js'; // Database connection

let sql = "SELECT * FROM users WHERE id = $1";

let queryOptions = { 
    bind: [],
    type: sequelize.QueryTypes.SELECT
}

let searchUser = sequelize.query(sql, queryOptions);
let searchUser$ = from(searchUser);

searchUser$.subscribe(console.log);
于 2019-01-29T09:54:17.117 回答