История изменений
Исправление
gh0stwizard,
(текущая версия)
:
Конечно, это не обязательно должны быть регекспы, но и свою функцию писать тоже не вариант, если все можно сделать средствами одной только монго и это, думаю, будет намного рациональнее.
Вкратце, регепсы в монге это фича для тех, кто не осилил иную архитектуру для своего приложения. Рекспы в монге не могут использовать индексы (то, что сказано, что якобы /^a/ - ищет как по индексу сильно упрощено). В результате будут тормоза на больших коллекциях, а без ^ в начале даст еще больше тормозов.
Написать функцию несложно, т.к. случай тривиален. Другое дело, что если коллекция реально огромная, то есть смысл вообще отказать от затеи. Либо, предварительно делать отсев значений по другому полю. При этом полученный массив потенциальных документов должен стремится к нулю :) Если значений будет более тысячи, а таких запросов будет сотни тысяч, то также стоит еще раз подумать над отказом от сей затеи. В остальных случаях, пишем функцию (порядка 10-30 строк) и все.
Вывод функции можно оптимизировать, если кэшировать результаты поиска.
Но лучше пересмотреть архитектуру коллекций, документов и т.п. и постараться забыть про регепсы в монге.
Есть альтернатива, делать поиск по регепсам на стороне клиента. Порой это лучшее решение.
Для «некрупных» проектов регепсы отлично справляются.
Исходная версия
gh0stwizard,
:
Конечно, это не обязательно должны быть регекспы, но и свою функцию писать тоже не вариант, если все можно сделать средствами одной только монго и это, думаю, будет намного рациональнее.
Вкратце, регепсы в монге это фича для тех, кто не осилил иную архитектуру для своего приложения. Рекспы в можно не могут использовать индексы (то, что сказано, что якобы /^a/ - ищет как по индексу сильно упрощено). В результате будут тормоза на больших коллекциях, без ^ в начале даст еще больше тормозов.
Написать функцию несложно, т.к. случай тривиален. Другое дело, что если коллекция реально огромная, то есть смысл вообще отказать от затеи. Либо, предварительно делать отсев значений по другому полю. При этом полученный массив потенциальных документов должен стремится к нулю :) Если значений будет более тысячи, а таких запросов будет сотни тысяч, то также стоит еще раз подумать над отказом от сей затеи. В остальных случаях, пишем функцию (порядка 10-30 строк) и все.
Вывод функции можно оптимизировать, если кэшировать результаты поиска.
Но лучше пересмотреть архитектуру коллекций, документов и т.п. и постараться забыть про регепсы в монге.
Есть альтернатива, делать поиск по регепсам на стороне клиента. Порой это лучшее решение.
Для «некрупных» проектов регепсы отлично справляются.