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