【发布时间】:2010-12-15 17:14:55
【问题描述】:
我有一个模型项目,它有一个名为 _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 => ...)' 等等。您能否建议我如何完成这项工作?
【问题讨论】:
标签: mongodb mongoid ruby-on-rails-3