Поиск слов во множественном и единственном числе при поиске формы множественного числа в MongoDB

1

Я прихожу к вам сегодня, потому что у меня небольшие проблемы. В настоящее время я работаю над импортом csv и преобразовываю данные в объект с моделями в базе данных. Я посылаю API имя объекта, и я сделал $ или для поиска с множественным числом или нет:

if (req.query.name) {
        params.$or =  [
            {name: { '$regex' : new RegExp(req.query.name+'(?!es|s|x)'), '$options' : 'ig' }},
            {name: { '$regex' : new RegExp(req.query.name), '$options' : 'ig' }},
            ]
    }

Проблема в том, что если, например, я посылаю "ящики", а модель называется "Box (small)", она не работает. однако, если я отправлю "ящик", он будет работать. Не могли бы вы рассказать мне о моей проблеме? он исходит из регулярного выражения.

EDIT: Я хотел бы найти слово "коробка", даже если я отправлю "ящики". В основном найти слово, множественное или единственное

Заранее спасибо !

(Извините за мой английский, я французский)

1 ответ

1
Лучший ответ

Вам нужно удалить (?:es|[sx]) в конце поискового запроса (вы можете использовать .replace(/(?:es|[sx])$/, '')) и добавить необязательную группу, не отрицательный взгляд:

new RegExp(req.query.name.replace(/(?:es|[sx])$/, '') + '(?:es|[sx])?')

См. Демо-версию regex.

Отрицательный lookahead (?!es|s|x) не соответствует совпадению, если движок regex находит es, s или x сразу после значения req.query.name, в то время как вы хотите опционально req.query.name часть строки.

  • 0
    Я думаю, что я ошибся, я хотел бы найти слово «коробка», даже если я отправляю «коробки». В основном найти слово во множественном или единственном числе
  • 0
    @Lucatorze ОК, так что исправление намного проще, используйте необязательную группу.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню