我在Postgres中有一个JSONB
列的表,其结构类似于
{"Name":"f","District Name":"ky","Age":"21","Gender":"M"}
MyTable.findAll({
where: {
'userData.Age':{
$lt: age,
}
}
})
转换为查询
SELECT "id", "uuid", "device_id", "version", "userData", "createdAt", "updatedAt"
FROM "MyTable" AS "MyTable"
WHERE CAST(("MyTable"."userData"#>>'{Age,$lte}') AS DOUBLE PRECISION) = 40;
下一个查询是
MyTable.findAll({
where: {
'userData.Gender':{
$eq: 'M',
}
}
})
转换为查询
SELECT "id", "uuid", "device_id", "version", "userData", "createdAt", "updatedAt"
FROM "MyTable" AS "MyTable"
WHERE ("MyTable"."userData"#>>'{Gender,$eq}') = 'M';
两者都返回空记录,我可以认为Age不起作用,因为它是JSON
中的文本,但性别应该有效。
使用这些原始查询我正在获取记录。
select uuid from "MyTable" where ("userData"->>'Age') :: Integer < 50;
select uuid from "MyTable" where ("userData"->>'Gender') = 'M';
答案 0 :(得分:1)
(&#34; MyTable&#34;。&#34; userData&#34;#&gt;&gt;&#39; {Gender,$ eq}&#39;)=&#39; M& #39; 强> 表明Sequelize查询存在问题,原因可能是$ lte和$ eq运算符不起作用,因为现在不支持运算符别名。请改用Op.lte或Op.eq。