如何在sequelize中将$ ilike与$ contains结合使用?

时间:2017-04-12 09:21:19

标签: json postgresql sequelize.js

我在postgres中有两列JSONB数据类型viz。 'category'和'subcategory'。我需要根据用户的输入在这些列上进行搜索。 “类别”列中的JSON如下所示:

[{id: 36, name: "categoryName1"},{id: 42, name: "categoryName2"}]

和'subcategory'列中的JSON如下所示:

[{id: 52, name: "subCategoryName1"},{id: 56, name: "subCategoryName2"}, {id: 70, name: "subCategoryName1"}]

输入可以是'id'或者它可以是'name'。我写的查询到目前为止试图在两列中根据提供的输入找到完全相同的名称。但我希望允许用户甚至通过部分名称查找,以便尝试使用$ilike运算符。查询如下:

Model.findAll({
        where: {
          $or: {
            category: {
              $contains: [{
                "name": {
                  $ilike: '%' + term + '%'
                }
              }]
            },
            subcategory: {
              $contains: [{
                "name": {
                  '$ilike': '%' + term + '%'
                }
              }]
            }
          }
        }
      })

RAW QUERY:

SELECT "category", "subcategory" FROM "table" AS "table" 
WHERE "table"."category" @> '[{"name":{"$ilike":"%subCategoryName2%"}}]' 
OR "table"."subcategory" @> '[{"name":{"$ilike":"%subCategoryName2%"}}]'

1 个答案:

答案 0 :(得分:0)

这可能是你的答案:

   {
    subcategory: {
        $contains: {
          name: {
              $ilike: '%' + term + '%'
      }
    }
   }
  }