Estoy tratando de crear un sistema de búsqueda para mi API Next JS. Esta API almacena algunos datos como los precios del combustible y el nombre de la estación de combustible, etc. A continuación se muestra el código:
class ApiFeatures { constructor(query, queryStr) { this.query = query; this.queryStr = queryStr; } search() { const keyword = this.queryStr.keyword ? { $or: [ //Causing the issue { name: { $regex: this.queryStr.keyword, $options: "i", }, }, { email: { $regex: this.queryStr.keyword, $options: "i", }, }, { //I think this is causing issue. Please read down below for more details. petrolPumpName: { $regex: this.queryStr.keyword, $options: "i", }, }, ], } : {}; this.query = this.query.find({ ...keyword }); return this; }Función API de Next JS.
const handler = catchAsyncErrors(async (req, res) => { const apiFeature = new ApiFeatures( //\/ this function is called without searching User.find().select("-role -verified"), req.query // \/ calling the search function ).search(); const users = await apiFeature.query; if (users.length === 0) { return res.status(404).json("No User Found"); } return res.status(200).json(users); }); export default connectToMongo(isAuthenticated(catchAsyncErrors(handler))); usando esta función, estoy tratando de obtener datos solo para la consulta solicitada. Ejemplo: si la URL de consulta es - http://localhost.com/users?keyword=username , entonces quiero una lista de todos los usuarios con ese user en particular, pero en su lugar busca a todos los usuarios como lo hace la función find() normal de MongoDB.
{ "rate": 50, "quantity": 100, "amount": 5000, "fuelStationName": "Abc fuel Station" }, // Why this is below one? \/ { "rate": 50, "quantity": 100, "amount": 5000, "fuelStationName": "XYZ" }Dentro de ese método de consulta de búsqueda, puede pasar el campo en particular con su valor y luego le dará solo ese documento. Por ejemplo:
Usuario.find({nombre:"nombre de usuario"});
solo le devolverá el usuario con ese nombre solamente.