MYSQLに行があり、Sequelize.jsクエリが必要です。
すべての行には、たとえば次のようなタイプのJSONの列があります。
[
{id: 1234, blah: "test"},
{id: 3210, blah: "test"},
{id: 5897, blah: "test"}
]
私が持っているid
と私はこれを含めどのような行を選択する必要がありid
、配列に少なくとも1つのオブジェクトに。
生のmysqlクエリは次のようになります。
SELECT * FROM `user` WHERE JSON_CONTAINS(`comments`, '{"id": 1234}');
簡単な続編の例:
const { fn, col, cast } = this.sequelize;
const User = this.sequelize.define('user', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
comments: DataTypes.JSON,
defaultValue: [],
})
User.findAll({
where: fn('JSON_CONTAINS', col('comments'), cast('{"id": 1234}', 'CHAR CHARACTER SET utf8')),
})
.then(users => console.log('result', users.map(u => u.get())))
.catch(err => console.log('error', err));
キャスト関数は、次のような誤ったクエリ文字列を回避するために、「id」を囲む二重引用符をエスケープ解除するために使用されます。
SELECT * FROM `user` WHERE JSON_CONTAINS(`comments`, '{\"id\": 1234}');
もう1つのダーティなmysqlクエリの例があります(使用しないでください):
SELECT * FROM `user` WHERE `comments` LIKE '%"id": 1234%';
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加