私は、_keyという名前の索引付きフィールドを持つモデルItemを持っています。これは、文字列の配列(検索のキーワード)です。 このモデル(JSON経由)のオートコンプリートは別の形式で行う必要があります。問題は、ユーザーが入力したすべての単語で正確に検索するのではなく、最後の単語を1つだけ残して完全に検索することです。だから私は、これは、このモデルではスコープ製:MongoIDと複数キーの問合せの問題
scope :find_by_keywords, lambda { |keys| where(:_keys.all => keys) }
scope :for_autocomplete, lambda { |keys| where(:_keys.all => keys[0..-2], :_keys => /^#{keys[-1]}/i) }
正確な検索のための最初の範囲が適していますが、私はオートコンプリートのための第二のスコープに問題があります。 MongoIDはこのクエリを最適化(または類似)するので、
db_development['items'].find({:_keys=>/^qwer/i}, {})
となります。つまり、最初の条件がすべて失われます。異なる条件のためにフィールドで異なる基準を必要とするため、驚くことではありません。 私は多くのオプションを試しました。異なる 'wheres'、 'all_in'メソッド、 'find(:conditions => ...)'などのように、.allと.inの異なる組み合わせ。私はこの仕事をどうやってやれるの?