Sequelize:如果至少有一项匹配,则忽略所有行

问题描述

我正在开发管理商店的应用程序。 每家商店都有一个或多个标签

例如:

  • 亚马逊,标记为电子商务和零售
  • 沃尔玛,标记为大卖场和零售

我的目标是忽略具有特定标签的商店。例如,当使用标签“Hypermarket”进行查询时,我想忽略 Walmart。我应该只买亚马逊。

我有 3 个表:Stores、Tags 和 Tagsstores(StoreId、TagId)。

Node.JS 代码中的 where 子句是:

where['$tags.name$'] = {
    [Op.or]: {
        [Op.is]: null,[Op.notin]: exclusion,}
}

启用日志记录时,以下是 Sequelize 生成查询

SELECT 
  "Stores"."id","Stores"."name","Tags"."id" AS "tags.id","Tags"."name" AS "tags.name" 
FROM 
  "Stores" AS "Stores" 
  LEFT OUTER JOIN (
    "Tagsstores" AS "Tags->Tagsstores" 
    INNER JOIN "Tags" AS "Tags" ON "Tags"."id" = "Tags->Tagsstores"."TagId"
  ) ON "Stores"."id" = "Tags->Tagsstores"."StoreId" 
WHERE 
  (
    "Tags"."name" IS NULL 
    OR "Tags"."name" NOT IN ('Hypermarket')
  ) 
ORDER BY 
  "Stores"."name" ASC

这不好,因为标签在不同的行上,所以过滤掉 Walmart 的 Hypermarket 标签后,Walmart 的零售标签仍然存在,我的结果列表中出现了 Walmart。

如果有帮助,模型是:

店铺模式:

  model.associate = function (models) {
    model.Tag = model.belongsToMany(models.Tag,{
      through: 'Tagsstores',as: 'tags',foreignKey: 'StoreId',scope: {
        scope: 'STORE'
      }
    });

Tagsstores 模型:

  model.associate = function (models) {
    model.belongsTo(models.Store,{})
    model.belongsTo(models.Tag,{})
  }

标签模型没有 associate 函数

您知道如何使用 Sequelize 实现我所需要的(如果一个字符串至少匹配 Store 的一个标签,我想完全过滤掉 Store)?

我在文档中找不到线索。

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)