Sequelize JOSNB查询

时间:2018-04-02 14:26:22

标签: postgresql sequelize.js jsonb

我在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';

1 个答案:

答案 0 :(得分:1)

(&#34; MyTable&#34;。&#34; userData&#34;#&gt;&gt;&#39; {Gender,$ eq}&#39;)=&#39; M& #39; 表明Sequelize查询存在问题,原因可能是$ lte和$ eq运算符不起作用,因为现在不支持运算符别名。请改用Op.lte或Op.eq。