express - Sequelize - 通过匹配所有标签来过滤 FindAll

标签 express sequelize.js

/assets/?tags[]=foo&tags[]=bar
对上述端点的获取请求应仅返回包含所有提供的标签( foobar )的记录
我目前的尝试是返回与任何给定标签匹配的任何记录。
const { tags } = req.query;

res.send(
      await Asset.findAll({
        where: whereOptions,
        include: [
          { model: AssetMime },
          {
            model: Tag,
            as: 'tags',
            where: {
              title: {
                [Op.in]: tags,
              },
            },
          },
        ],
      })
    );
如何修改我的过滤器以返回所有标签匹配的记录?

最佳答案

如果您的 DBMS 支持 Op.all 运算符,您可以尝试 op.in 运算符而不是 ALL
另一种解决方案是结合这些条件

const where = {}
if (tags && tags.length) {
  where[Op.and] = tags.map(x => ({ title: x })
}

await Asset.findAll({
        where: whereOptions,
        include: [
          { model: AssetMime },
          {
            model: Tag,
            as: 'tags',
            where: where,
          },
        ],
      })

关于express - Sequelize - 通过匹配所有标签来过滤 FindAll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63631187/

相关文章:

javascript - 将base64图像数据转换为png?

javascript - 将从服务器获取的数据处理成 html 文件(使用 Node.js 和 Express)

node.js - Node 如何在并行功能中使用路由

node.js - 如何在nodejs中将 'select if'函数与sequ​​elize一起使用

javascript - 无法在 Sequelize 中加入表

mysql - 如何使用sequelize 查询该模型?

javascript - 多个查询以不可预测的排序结果结束

node.js - Express 中的嵌套错误处理

node.js - 使用sequelize-oracle 没有恢复数据

database - 与 Sequelize 的复合/复合键关联