Heim  >  Fragen und Antworten  >  Hauptteil

Fragen Sie Mongodb mit zwei Parametern ab

Hat jemand eine Idee, wie ich diesen Code ändern könnte, damit ich nach Titel, Bewertung oder beidem suchen kann? Ich habe mehrere Ansätze ausprobiert, einschließlich der Verwendung des $and-Operators, ohne Erfolg

static async getMovies({
    filters = null,
    page = 0,
    moviesPerPage = 20,
  } = {}) {
    let query = {}
    if (filters) {
      if ("title" in filters) {
        console.log(filters["title"]);
        query.title = { $regex: filters["title"], $options: "i" };
      }  if ("rated" in filters) {
        query.rated = { $eq: filters["rated"] };
      }
    }

    let cursor
    try {
      cursor = await movies.find(query)
        .limit(moviesPerPage)
        .skip(moviesPerPage * page);
      const moviesList = await cursor.toArray();

      for (let i = 0; i < moviesList.length; i++) {
        const movie = moviesList[i];
        const movieReviews = await reviews
          .find({ movie_id: movie._id })
          .toArray();
        movie.review = movieReviews;
      }

      const totalNumMovies = await movies.countDocuments(query);
      return { moviesList, totalNumMovies };
    } catch (e) {
      console.error(`无法发出查找命令,${e}`);
      return { moviesList: ["error"], totalNumMovies: 0 };
    }
  }
P粉665679053P粉665679053374 Tage vor541

Antworte allen(1)Ich werde antworten

  • P粉986860950

    P粉9868609502023-09-12 14:14:58

    如果您想要根据名称或评分进行搜索,或者同时使用两者,您可以简单地使用下面的查询。您不需要使用$eq运算符与rated的过滤器一起使用。mongoose的find函数会直接匹配值,而不使用$eq运算符。

    if (filters?.title) {
      query.title = { $regex: `^${filters.title.replace(/[-[\]{}()*+?.,\\/^$|#\s]/g, "\\$&")}`, $options: "i" }
    }  
    if (filters?.rated) {
      query.rated = filters.rated
    }
    console.log(query)

    Antwort
    0
  • StornierenAntwort