【发布时间】:2015-11-03 19:38:38
【问题描述】:
我花了一点时间才弄清楚这一点,我相信其他人也很好奇如何做到这一点..
我有一个案例,我需要使用我转换为数组的用户输入来运行.and() 查询。我的问题是查询正在搜索从输入中读取的两个单词的每个字段。
【问题讨论】:
标签: ruby-on-rails mongodb mongoid mongodb-query
我花了一点时间才弄清楚这一点,我相信其他人也很好奇如何做到这一点..
我有一个案例,我需要使用我转换为数组的用户输入来运行.and() 查询。我的问题是查询正在搜索从输入中读取的两个单词的每个字段。
【问题讨论】:
标签: ruby-on-rails mongodb mongoid mongodb-query
所以我所做的是根据字段分解查询。 IE。如果您有 :tags, :story, :author 字段,您将有 3 个查询,tag_query = Book.any_in(:tags => @user_search)
我创建了一个空哈希 conditions = {}
然后我会使用 conditions.merge!(tag_query.selector) 将每个查询合并到 conditions 哈希
我通过检查查询是否返回任何Book 文档来决定要合并哪些查询:tag_query.exists ? conditions.merge!(tag_query.selector) : nil。如果查询返回一个 Book 文档,则它被合并到散列中,如果不是,则什么也不会发生。
最后一步是运行我们关心的实际查询..@book = Book.where(conditions)。这样做就是将所有实际找到的查询组合在一起,然后像 .and() 查询一样将它们组合在一起!
不是因为在每个字段中都没有找到这两个词而返回 0,而是智能地将确实找到某些内容的字段汇集在一起,并使其仅计算在整个中找到两个词的位置 文件。
【讨论】: