Quelqu'un a-t-il une idée de la manière dont je pourrais modifier ce code afin de pouvoir effectuer une recherche en fonction du titre, de la note, ou des deux ? J'ai essayé plusieurs approches, notamment en utilisant l'opérateur $and, sans succès
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 }; } }
Si vous souhaitez effectuer une recherche basée sur le nom ou la note, ou les deux, vous pouvez simplement utiliser la requête ci-dessous. Vous n'avez pas besoin d'utiliser l'opérateur $eq avec des filtres évalués. La fonction find de Mongoose fera correspondre la valeur directement sans utiliser l'opérateur $eq.