MongoID和多键查询问题

时间:2010-12-15 17:14:55

标签: mongodb mongoid ruby-on-rails-3

我有一个模型Item,其中包含一个名为_key的索引字段,即字符串数组(搜索关键字)。 现在我需要以另一种形式对这个模型(通过JSON)进行自动完成,问题是用户输入的所有单词不是精确搜索,而是需要通过除最后一个单词之外的所有单词进行精确搜索。所以我在这个模型中制作了这个范围:

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}, {})

即。它总是错过了第一个条件。这并不奇怪,因为它在不同条件下需要不同的场地标准。 所以我尝试了很多选择。 .all和.in的不同组合,分别与不同的'wheres','all_in'方法,'find(:conditions => ...)'等等。你能建议我怎么做这个工作吗?

1 个答案:

答案 0 :(得分:0)

我找到了这样的解决方案:

范围:for_autocomplete,lambda {| keys | where(:_ keys.all => keys [0 ..- 2] + [/ ^#{keys [-1]} /])}

似乎正在发挥作用。