Sequelizeを使用して、ネストされた値でMySQLテーブルのJSON列の行をフィルタリングする方法を理解するのに助けが必要です。ドキュメントは、それを( -のみのPostgreSQL&MSSQLのために与えられていないREF)
テーブル定義-
module.exports = (sequelize, DataTypes) => {
const Comment = sequelize.define('Comment', {
action: DataTypes.STRING,
type: DataTypes.STRING,
reason: DataTypes.STRING,
reference: DataTypes.JSON,
active: {
type: DataTypes.INTEGER,
defaultValue: 1,
},
}, {
classMethods: {
associate(models) {
Comment.belongsTo(models.User, {
foreignKey: 'userId',
});
},
},
});
return Comment;
};
Comments
表の参照列の値-
{
"orderItemId": 2,
"xkey": 3,
"ykey": 4
}
{
"orderItemId": 4,
"xkey": 1,
"ykey": 1
}
{
"orderItemId": 3,
"xkey": 1,
"ykey": 6
}
{
"orderItemId": 2,
"xkey": 1,
"ykey": 0
}
「orderItemId」が2であるすべての行をフィルタリングするにはどうすればよいですか。
予想されるSQLクエリ
select * from Comments where reference->"$.orderItemId" = 2
を使用する方法を考え出しましたsequelize.literal
が、この関数を使用しない方法はありますか。
models.Comment.findAll({
where: sequelize.literal(`reference->"$.orderItemId"=2`),
})
上記の場合に複数の条件を追加する方法-
reference->"$.orderItemId" = 2 and action = 'xyz'
使用する必要があります Sequelize.Op
例:
models.Comment.findAll({
where: {
action: 'xyz',
[Op.and]: sequelize.literal(`reference->"$.orderItemId"=2`),
},
});
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加