我有以下代码,假设某些带有User
的Sequelize模型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的用法,使其仅返回一组结果?如何避免重复的结果?
答案 0 :(得分:1)
出现重复结果的原因是因为Sequelize returns both the results of your SQL query and the metadata results。在某些情况下,您使用的SQL引擎也会返回结果作为元数据。
您要做的是防止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
})
除了在查询选项中传递可能要绑定的任何参数外,还将类型说明符添加到查询选项中:
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);