我花了一些时间来弄清楚这一点,我确信其他人也很好奇如何做到这一点。
我有一个案例,我需要使用转换为数组的用户输入运行.and()
查询。我的问题是查询是在每个字段中搜索从输入读入的两个字。
答案 0 :(得分:0)
所以我所做的就是根据字段分解查询。即如果您有字段:tags, :story, :author
,则会有3个查询,tag_query = Book.any_in(:tags => @user_search)
我创建了一个空哈希conditions = {}
然后我会使用conditions
将每个查询合并到conditions.merge!(tag_query.selector)
哈希
我通过检查查询是否返回任何Book
文档来确定要合并的查询:tag_query.exists ? conditions.merge!(tag_query.selector) : nil
。如果查询返回了Book文档,则它被合并到散列中,如果没有,则没有任何反应。
最后一步是运行我们关心的实际查询.. @book = Book.where(conditions)
。这样做就是将所有实际找到的东西组合起来并将它们粉碎在一起就像.and()
查询一样!
因为在每个字段中找不到这两个单词,所以不会返回0
,而是智能地将实际找到某些内容的字段汇集在一起并使其成为唯一可以计算在中找到两个单词的位置整个文件。