2012-02-09 3 views
3

が、それは次のようでOKです:pymongoで "javascript"クエリで "find"メソッドを使用することはできますか?モンゴで

> db.posts.find("this.text.indexOf('Hello') > 0") 

しかしpymongoで、次のコマンドを実行する場合:

for post in db.posts.find("this.text.indexOf('Hello') > 0"): 
    print post['text'] 

エラーが発生しました。

私はこの例ではFull Text Search in Mongoが良い方法だと思いますが、pymongoで "javascript"クエリで "find"メソッドを使用することは可能ですか?あなたは意志として法外なものとみなされる

db.posts.find({"$where": "this.text.indexOf('Hello') > 0"}) 

はシャードセットアップが、やってのコストが、すべてで動作します: -

答えて

6

あなたは正しいされます句は、[1] $を使用して、サーバー側のJavaScriptでこれを行いますコレクション内のすべてのドキュメントを検査する必要があります。そのため、一般的には素晴らしいアイデアとはみなされません。

あなたは正規表現検索をも行うことができます:あなたはたとえば、正規表現を固定場合

db.posts.find({'text':{'$regex':'Hello'}}) 

は、正規表現が固定されていないので、これはまた、(フルコレクションのスキャンを行いますあなたがあればチェックしていますフィールドは値で始まり、はインデックスを利用できるフィールドにインデックスを持ちます)。

これらの2つのアプローチは高価であり、最適なアプローチを実行したり、拡張したりしないとすれば、

あなたが[2]で示したリンクに記載されているフルテキスト検索手法はうまくいきます。スケールとインデックスを利用します

db.posts.find({"_keywords": {"$in": "hello"}); 

はとてもパフォーマンスになります。配列内の小文字などのキーワードを格納_keywordsフィールド、そして、あなたがそうのように照会することができ、フィールドのインデックスを作成します。


[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

関連する問題