私は2つのモデルFoo
とBar
を持っています。 Foo
にはフィールドbarId
があるため、それに関連付けられたオブジェクトは1つです。Bar
私はすべての私のFoo
オブジェクトを照会し、(私はsequelize-typescriptと活字体を使用しています)ように自分のassiciated Bar
オブジェクトを含めることができます。Sequelize.jsとPostgreSQLを使用して関連付けられたモデルのJSONBフィールドを照会
Foo.findAll<Foo>({
include: [{ model: Bar }]
});
Bar
オブジェクトは私ができる構造
{ inner_field1: 'some text', inner_field2: 'some more text' }
とJSONBフィールドjsonb_field
を持っていますクエリBar
オブジェクトとフィルタをinner_field1
と入力してください:
Bar.findAll<Bar>({
where: { 'jsonb_field': { inner_field1: 'text to find' } }
});
これは、次のSQLクエリを生成します。
SELECT ... FROM "Bar" AS "Bar"
WHERE ("Bar"."jsonb_field"#>>'{inner_field1}') = 'text to find'
をこれまでのところは良いです。私ができるので、正確に、私はバーのオブジェクトを含めていたレコードの
Error: Invalid value [object Object]
at Object.escape ({project_root}\node_modules\sequelize\lib\sql-string.js:50:11)
at Object.escape ({project_root}\node_modules\sequelize\lib\dialects\abstract\query-generator.js:917:22)
at Object.whereItemQuery ({project_root}\node_modules\sequelize\lib\dialects\abstract\query-generator.js:2095:41)
at _.forOwn ({project_root}\node_modules\sequelize\lib\dialects\abstract\query-generator.js:1937:25)
...
:今、これは例外をスロー
Foo.findAll<Foo>({
where: { '$bar.jsonb_field$': { inner_field1: 'text to find' } },
include: [{ model: Bar }]
});
:今Bar
オブジェクトとフィルタリングinner_field1
によるが含まれ、のはFoo
オブジェクトを照会してみましょう以下のような他の非JSONBプロパティによってフィルタ:
Foo.findAll<Foo>({
where: { '$bar.number_field$': 5 },
include: [{ model: Bar }]
});
は、私の知る限りでは、問題がSequelize n個でありますjsonb_field
の型を認識していないので、オブジェクトがwhereクエリーに渡されたときにエラーをスローします。
sequelize.literal()
またはsequelize.json()
を使用してこのエラーを回避する方法はありますか?