Nodejs и улучшите поиск с помощью moongose - PullRequest
0 голосов
/ 17 апреля 2020

Я хочу иметь возможность более свободно искать в БД по строке. Например, я храню имя и фамилию как "Джо Доу".

Я хочу иметь возможность найти его в таких строках: Джо, Джо, До, Доу, Джо До, Джо До, До Джо, Доу Джо А также, если есть опечатки, такие как Джо Доу.

Я использую moongose ​​для обработки моего атласа DB (mongoDB).

Это то, что у меня сейчас есть:

const aggregate = [
    {
      $match: {
        category: { $regex: `${body.category}`, $options: 'i' },
      },
    }, {
      $match: {
        name: { $regex: `${body.search}`, $options: 'i' },
      },
    }
  ];


  connectToDatabase().then(() => {
    Names.aggregate(aggregate)
      .then((name) =>
        callback(null, {
          statusCode: 200,
          headers: {
            'Access-Control-Allow-Origin': '*',
          },
          body: JSON.stringify(name),
        })
      )
      .catch((err) =>
        callback(null, {
          statusCode: err.statusCode || 500,
          headers: {
            'Access-Control-Allow-Origin': '*',
            'Content-Type': 'text/plain',
          },
          body: 'Could not find.',
        })
      );
  });

1 Ответ

1 голос
/ 17 апреля 2020

Вам необходимо передать регулярное выражение методу find в модели Mon goose. Допустим, ваша модель User, и вам нужно искать что-то вроде Jo:

const findUsersLikeJo = async () => {
    const users = await User.find({name: /Jo/i})
    console.log( findUsersLikeJo() )
}

Это основная идея. Добавьте его к вашему конкретному c случаю. Посмотрите здесь больше примеров: https://mongoosejs.com/docs/api.html#model_Model .find

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