2012-02-09 98 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

相關問題