Игнорировать специальные символы перед условиями соответствия

#mongodb

#mongodb

Вопрос:

Как я могу написать эквивалент следующего в монго? Мне нужно игнорировать некоторые символы (пробелы, дефис) из определенного столбца, прежде чем будут проверены условия. Ради примера mysql я просто удаляю пробел.

 select * from TABLE
where REPLACE('name', ' ', '') = 'TEST'
  

Итак, если в столбце name есть «T E S T», это должно совпадать.

Комментарии:

1. Какие специальные символы нужно использовать? Покажите, что именно вы пытаетесь сделать, есть несколько подходов.

2. ваш вопрос и ваш пример — совершенно разные звери. пример даже не имеет смысла. пожалуйста, уточните. не могли бы вы привести примеры, отличные от SQL?

3. Извините, если это было неясно. Я немного изменил его, надеюсь, теперь это имеет смысл.

4. @NeilLunn Пробелы и дефис — это символы, которые мне нужно игнорировать при сопоставлении.

Ответ №1:

Вы можете попробовать использовать $where operator в своем запросе:

 {$where: "this.name.replace(/[ -]/g,'') == 'TEST'"}
  

или:

 {$where: "this.name.match(/T[ -]*E[ -]*S[ -]*T/)"}
  

или непосредственно $regex :

 {name: /T[ -]*E[ -]*S[ -]*T/}
  

Дополнительная информация об $where $regex операторах.

Комментарии:

1. Хорошо отвечает. Всего за два цента, тем $regex лучше, особенно если его можно привязать ^ к началу строки. Если нет, он все равно сканирует, но отсутствие оценки JavaScript ускоряет его.

2. @dgiugg Это уже отвечает на мои вопросы. Но у меня был еще один вопрос. Вместо того, чтобы говорить игнорировать дефис и пробелы, это может быть похоже на учет только буквенно-цифровых символов для сопоставления. Совершенно нормально, если это должен быть другой вопрос, я сделаю это.