#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/}
Комментарии:
1. Хорошо отвечает. Всего за два цента, тем
$regex
лучше, особенно если его можно привязать^
к началу строки. Если нет, он все равно сканирует, но отсутствие оценки JavaScript ускоряет его.2. @dgiugg Это уже отвечает на мои вопросы. Но у меня был еще один вопрос. Вместо того, чтобы говорить игнорировать дефис и пробелы, это может быть похоже на учет только буквенно-цифровых символов для сопоставления. Совершенно нормально, если это должен быть другой вопрос, я сделаю это.