1
我有像「embedded one to many」模式執行以下操作:排列的數組元素,如在一個MongoID查詢條件的查詢
class User
include Mongoid::Document
field :nickname
embeds_many :watchlists
end
class Watchlist
include Mongoid::Document
field :html_url
field :description
field :tags_array, type: Array
embedded_in :user
end
和一個「criteria」用於查詢類似如下:
User.where('watchlists.tags_array' => %w[ruby web framework])
問題是,它只匹配'watchlists.tags_array'提供的單詞的「確切」序列,而我希望它匹配'ruby','web'和'framework'的所有排列。
例:
在陣列狀的情況下:%W [紅寶石web框架],我需要爲以下所有排列匹配:
ruby web framework
ruby framework web
framework web ruby
framework ruby web
web framework ruby
web ruby framework
這可能嗎?我怎樣才能做到這一點 ?
UPDATE:
查詢是一個稍微複雜一些(我試圖semplify),其嵌套一種提取和置換不與任何我的解決方案,也不符合塞爾吉奧Tulentsev解決方案的工作。它只是比賽的確切陣列兩種情況:
Object.const_set :Competitor, Struct.new(:html_url, :description, :watchers, :forks)
def self.find_competitors(tags_array)
competitors = []
# doesn't work: User.where('watchlists.tags_array' => tags_array).only(:watchlists).each do |u|
User.all_in('watchlists.tags_array' => tags_array).only(:watchlists).each do |u|
u.watchlists.where(:tags_array => tags_array).each do |wl|
competitors << Competitor.new(wl.html_url, wl.description, wl.watchers, wl.forks)
end
end
return competitors
end
UPDATE:
我只是想念,同樣的「all_in criteria」入內cicle太...和置換工作太細:
User.all_in('watchlists.tags_array' => tags_array).only(:watchlists).each do |u|
u.watchlists.all_in(:tags_array => tags_array).each do |wl|
competitors << Competitor.new(wl.html_url, wl.description, wl.watchers, wl.forks)
end
end
@ LucaG.Soave:對不起,什麼? –
對不起,我沒有看到Mongoid說的版本... –
它沒有在排列中工作,請參閱更新。 –