2012-02-09 97 views

回答

6

你是正确的,你使用$ where子句[1]实现与服务器端JavaScript:

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

相关问题