1

一致する要素の配列(tags_array)を探すクエリ基準があります:

User.all_in('watchlists.tags_array' => tags_array)

基準を大文字と小文字を区別しないようにしたいのですが、これは、またはなどと%w[Ruby Web Framework]同様に一致させたいことを意味します...%w[RUBY WEB FRAMEWORK]%w[ruby web framework]

これはMongoidを介して可能ですか、それとも外部フィルタートリックを使用する必要がありますか?

4

4 に答える 4

5

ジョーダンのサポートのおかげで、そして追跡目的のためだけに(私自身と他の人のために)、私はソリューション全体を投稿します。

はい、Yuriy Goldshtrakhは正しかったです、MongoDBはまだ大文字と小文字を区別しないクエリをサポートしていませんが、MongoIDには正規表現があります。私の唯一の疑問は、「muが短すぎる」ですでに述べたように、パフォーマンスの低下に関するものですが、今までチェックしていませんでした...とにかくここにあります :

 Object.const_set :Competitor, Struct.new(:html_url, :description, :watchers, :forks)
 def self.find_competitors(tags_array)
    competitors = []
    User.all_in('watchlists.tags_array' => tags_array.map{|tag|/^#{tag}/i}).only(:watchlists).each do |u|
     u.watchlists.all_in(:tags_array => tags_array.map{|tag|/^#{tag}/i}).desc(:watchers).each do |wl|
       competitors << Competitor.new(wl.html_url, wl.description, wl.watchers, wl.forks)
     end
    end
    return competitors
 end

保存/作成モンゴイドレベルでの正規化はありません。タグは大文字または小文字で保存されます。

正規化(大文字と小文字を区別しないタグの照合)は、ネストされたクワイアリング基準の間に完全に実現されます(1対多のモデルが埋め込まれているためネストされています)。

より良いアイデアやコードがあれば、投稿してください。

また、 Luiz K.の回答にも感謝します。そのように従わなくても、データレベルでの正規化は私の見解では制限が厳しく、セマンティックと弾力性のある「ユーザー」側(実際にタグ付けしている)を失います。とにかく、他の要件に対する良い解決策になる可能性があります。

LucaG.Soaveに感謝します

于 2012-05-10T23:26:41.370 に答える
4

mongoでは大文字と小文字を区別しない選択がサポートされていないと思います。データをすべて特定の大文字と小文字に変換して正規化するか、正規表現ファインダーを使用できます。

于 2012-05-09T20:31:33.887 に答える
0

これは私がやったことです:

def create
    @noticia = Noticia.new(params[:noticia])
    @noticia.tags = @noticia.conteudo.html_safe.split(' ')
    @noticia.tags.each_with_index do |tag, index|
      @noticia.tags[index] = @noticia.tags[index].gsub(/<\/?[^>]*>/, "")
    end

私はすべてのnoticiaのコンテンツを「タグ」に分割し、それらを小文字にしました。私の検索では、次のことを行います。

def buscar
    array = params[:query].split(' ')
    array.each_with_index do |query, index|
      array[index] = array[index].gsub(/<\/?[^>]*>/, "").downcase
    end
    @noticias = Noticia.where(:tags.all => array).paginate(:page => params[:page])
  end

クエリ検索もダウンケースしました。フィールド
にインデックスを付けることを忘れないでくださいtags

于 2012-05-10T12:38:56.573 に答える
0

mongoリクエストで正規表現を管理するために(find、update ..)
これを行います:
'p'は検索する名前を格納する変数です

reg = / ^#{p} $ / i
 @db ['pgm']。update({'nom' =>reg}...。

于 2014-05-10T16:39:15.777 に答える