2017-08-24 24 views
0

sequelizeで正しい役割を持つユーザーのみを取得したいというクエリを実行しようとしています。ロールは文字列の配列として格納されます。例えば、['student']または['school_owner', 'admin']です。Sequelize:クエリ文字列が文字列の配列postgresql

この特定のケースでは、私は実際に学校を取得しようとしており、その学校の学校所有者を含めるようにしています。失敗し、関連するクエリが

const ownerQuery: { [key: string]: any } = {}; 
ownerQuery.roles = {$in: ["{school_owner}"]}; 

School 
    .findById(req.params.id,{include: [{ model: User, where: ownerQuery }]}) 
    .then((school: School | null) => { 
    if (school === null) { 
     res.status(404).json({message: "Not Found"}) 
    } else { 
     res.json(school) 
    } 
    }, (error) => next(error)) 

sequelizeある{school_owner, admin}のようなものとして、配列の値を記憶しています。 documentationは私が{}を削除し、私の$inクエリ

ownerQuery.roles = {$in: ["school_owner"]}; 

のために代わりに次を使用することができますが、それは私にArray value must start with "{" or dimension information.'エラーを与えることを言います。

最初の例では、クエリは失敗しませんが、$inクエリのように機能しません。 rolesの内容を正確に一致させる必要があります。例えば、ユーザは、私が持っている両方adminschool_owner役割が

ownerQuery.roles = {$in: ["{school_owner, admin}"]}; 

私は特定の役割を持つすべてのユーザーに一致することができるように$inクエリを実行するための正しい方法は何を言っている場合はどうなりますか?

答えて

0

この機能を実装する正しい方法は行うことです。これはroles

のその配列内の役割 school_ownerを持つすべてのユーザーを返します

ownerQuery.roles = { $contains: ["school_owner"] };