Вы правы - вы делаете это с помощью javascript на стороне сервера, используя условие $ where [1]:
db.posts.find({"$where": "this.text.indexOf('Hello') > 0"})
Будет работать на всех, кроме сегментированных установках, но затраты на выполнение будут считаться чрезмерными, так как вы будете проверять все документы в коллекции, поэтому, как правило, это не считается отличной идеей.
Вы также можете выполнить поиск по регулярному выражению:
db.posts.find({'text':{'$regex':'Hello'}})
Это также выполнит полное сканирование коллекции, поскольку регулярное выражение не привязано (например, если вы привязываете регулярное выражение, например, вы проверяете, начинается ли поле со значения , а имеет индекс на это поле вы можете использовать индекс).
Учитывая, что эти два подхода дороги и не будут работать или масштабироваться лучше, чем лучший подход?
Хорошо, подход полнотекстового поиска, как описано в ссылке, которую вы дали [2], работает хорошо. Создайте поле _keywords, которое хранит ключевые слова в нижнем регистре в массиве, индексируйте это поле, а затем выполните запрос следующим образом:
db.posts.find({"_keywords": {"$in": "hello"});
Это будет масштабировать и использовать индекс, поэтому будет производительным.
[1] http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-JavascriptExpressionsand%7B%7B%24where%7D%7D
[2] http://www.mongodb.org/display/DOCS/Full+Text+Search+in+Mongo