Как сделать запрос в Mon go, чтобы найти в коллекции элементы, соответствующие символам в запросе - PullRequest
0 голосов
/ 16 февраля 2020

В моем Node API с MongoDB я добавил функцию поиска, чтобы позволить клиенту искать в коллекции профилей профили других пользователей. В настоящее время моя функциональность поиска принимает в запросе 3 параметра: имя (fn), фамилия (ln) и компания (cp).

Результаты получены по одному параметру или их комбинации 3. На данный момент это точное совпадение, как если бы я искал fn=joe, я получаю в качестве результата весь профиль с Джо .

Моя цель состоит в том, чтобы иметь возможность найти также запись, такую ​​как J или Jo , потому что во внешнем интерфейсе будет реализована система поиска в реальном времени, поэтому, когда пользователь начинаю печатать результаты, всплывает. Мне нужно изменить свой поиск, чтобы он соответствовал требованиям, но я не очень разбираюсь в Mon go, чтобы сделать это.

Моя функция поиска:

const SearchController = {
    async getQuery(req, res) {
        try {
            // Set
            const set = {};

            // query params
            const { fn, ln, cp } = req.query;

            // RexExp to allow upper and lower case in the search
            // First name
            if (fn) {
                set["firstname"] = new RegExp(
                    "\\b" + req.query.fn + "\\b",
                    "i"
                );
            }

            // Last name
            if (ln) {
                set["surname"] = new RegExp("\\b" + req.query.ln + "\\b", "i");
            }

            // Company
            if (cp) {
                set["experience.company"] = new RegExp(
                    "\\b" + req.query.cp + "\\b",
                    "i"
                );
            }

            //
            if (Object.keys(set).length != 0) {
                // Searching the profile results
                const searchResult = await Profile.find(set, (err, doc) => {
                    return doc;
                });

                // No results
                if ((await searchResult).length === 0)
                    throw new ErrorHandlers.ErrorHandler(
                        404,
                        `Query do not provided any result`
                    );

                // Response
                res.status(200).json(searchResult);
            } else {
                // No result
                throw new ErrorHandlers.ErrorHandler(
                    404,
                    "Query do not provided any result"
                );
            }
        } catch (err) {
            res.status(500).json({ message: err.message });
        }
    }
};  

URL, который я составляю для поиска:

URL/search?cp=...&fn=...&ln=... 

Как уже упоминалось, я могу искать только одну или комбинацию из трех параметры и это не чувствительно к регистру. Я могу использовать G как g.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...