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

MongoDB多条件查询修改:实现标题/评分单独或组合搜索

解决多条件电影搜索问题:支持标题、评分及组合搜索

你的代码逻辑本身是对的,MongoDB 会自动将查询对象中的多个字段条件用 $and 逻辑合并,不需要手动写 $and 操作符。没成功可能是参数传递细节或者空值处理的问题,下面是优化后的代码,同时解决原代码中循环查询评论的性能问题:

static async getMovies({
  filters = null,
  page = 0,
  moviesPerPage = 20,
} = {}) {
  let query = {};
  if (filters) {
    // 仅当title有有效内容时添加正则匹配
    if (filters.title?.trim()) {
      query.title = { $regex: filters.title.trim(), $options: "i" };
    }
    // 仅当rated有值时添加精确匹配
    if (filters.rated !== undefined && filters.rated !== null) {
      query.rated = filters.rated; // $eq可以省略,直接写值就是精确匹配
    }
  }

  try {
    // 先查询电影列表
    const moviesList = await movies.find(query)
      .limit(moviesPerPage)
      .skip(moviesPerPage * page)
      .toArray();

    // 批量查询评论,避免循环多次请求数据库(性能优化)
    if (moviesList.length > 0) {
      const movieIds = moviesList.map(movie => movie._id);
      const allReviews = await reviews.find({ movie_id: { $in: movieIds } }).toArray();
      // 将评论映射到对应电影
      const reviewsMap = new Map();
      allReviews.forEach(review => {
        const movieId = review.movie_id.toString();
        if (!reviewsMap.has(movieId)) {
          reviewsMap.set(movieId, []);
        }
        reviewsMap.get(movieId).push(review);
      });
      moviesList.forEach(movie => {
        movie.review = reviewsMap.get(movie._id.toString()) || [];
      });
    }

    const totalNumMovies = await movies.countDocuments(query);
    return { moviesList, totalNumMovies };
  } catch (e) {
    console.error(`查询失败: ${e}`);
    return { moviesList: [], totalNumMovies: 0 };
  }
}

关键说明:

  1. 多条件自动合并:当你同时传入 title 和 rated 时,MongoDB 会自动按「同时满足标题匹配+评分精确相等」的逻辑查询,无需手动添加 $and。
  2. 空值过滤:新增了对 title 空字符串、rated 空值的判断,避免无效条件干扰查询。
  3. 性能优化:原代码循环查询每部电影的评论会产生大量数据库请求,改成批量查询后用 Map 映射,大幅提升效率。

测试用例:

  • 仅按标题搜索:getMovies({ filters: { title: "星际" } })
  • 仅按评分搜索:getMovies({ filters: { rated: "PG-13" } })
  • 同时按两者搜索:getMovies({ filters: { title: "星际", rated: "PG-13" } })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 11:59:57