You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js+Sequelize关联表查询:如何按collection_name搜索书籍?

解决多对多关联下的跨表搜索问题

要实现同时按书籍名称、作者和所属收藏集名称搜索书籍,你需要在查询的where条件中加入对关联表Collection字段的匹配,利用Sequelize的关联字段引用语法即可实现:

修改后的完整代码

// 确保已导入Op
const { Op } = require('sequelize');

router.get("/search", (req, res) => {
  const { term } = req.query;
  console.log(term)
  Book.findAll({
    include: [
      {
        model: Collection,
        required: false // 保持左连接,无关联收藏集的书籍也能被name/author搜索到
      },
    ],
    where: { 
      [Op.or]:[
        {name: { [Op.like]: `%${term}%` }},
        {author: { [Op.like]: `%${term}%` }},
        // 引用关联表的collection_name字段进行匹配
        {'$Collection.collection_name$': { [Op.like]: `%${term}%` }}
      ]
    }
  }).then((book) => {
      res.status(200).json(book);
    })
    .catch((err) => res.status(404).json({ error: err }));
});

关键改动说明

  • 使用$Collection.collection_name$语法引用关联表的字段,Sequelize会自动解析为关联表的对应字段,实现跨表条件匹配
  • 添加required: false到include配置中,确保即使书籍未关联任何收藏集,也能通过名称或作者的条件被检索到;如果只需要返回存在匹配收藏集的书籍,可将该值改为true(内连接)
  • 改用模板字符串%${term}%替代字符串拼接,代码更简洁易读

内容的提问来源于stack exchange,提问作者Shabnam Sabah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:14:59