ruby - Mongoid 'or' 和 'in' - 查询多个数组

标签 ruby mongodb hash mongoid mongoid4

我在 Mongo 中有一个包含两个数组字段的文档:

field   :app_usernames,     type:  Array 
field   :email_addresses,   type:  Array

我想创建一个函数,它使用一组用户名和一组电子邮件地址来搜索集合。更重要的是,我希望它返回具有数组中传递的任何值的文档:

def find_people(usernames_to_search, emails_to_search)...

给定一个包含字段值的文档:

app_usernames = ['test1','test2','test3']
email_addresses = ['test1@test.com','test2@test.com']

我希望函数在通过数组参数搜索任何这些值时找到它。它应该在以下情况下返回此文档:

find_people nil,['test1@test.com']
find_people ['test3'],['test1@test.com']
find_people ['oldusername'],['test1@test.com']

最后一个似乎给我带来了麻烦。

到目前为止,我已经尝试过了

.or(:app_usernames.in usernames_to_search, :email_addresses.in emails_to_search)

但是没有用。

最佳答案

or 方法是用一个单独的条件列表来调用的,这样它就可以变成这样:

x.or(condition1, condition2)

进入 MongoDB 查询,如:

$or: [ condition1, condition2 ]

当你说:

.or(:app_usernames.in => usernames_to_search, :email_addresses.in => emails_to_search)

您要向 传递多少个参数?答案是一个。你实际上是这样说的:

.or({ :app_usernames.in => usernames_to_search, :email_addresses.in => emails_to_search })

您需要自己添加大括号,这样 Ruby 就不会将参数折叠成一个散列:

.or(
  { :app_usernames.in   => usernames_to_search },
  { :email_addresses.in => emails_to_search    }
)

或者像这样:

args = [ ]
args.push(:app_usernames.in => usernames_to_search) if(usernames_to_search.present?)
args.push(:email_addresses.in => emails_to_search)  if(emails_to_search.present?)
query = query.or(*args) if(args.present?)

关于ruby - Mongoid 'or' 和 'in' - 查询多个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26273027/

相关文章:

ruby - 在多线程环境中跨不同请求共享( Mechanize ) session ?

ruby-on-rails - link_to是否有:before and/or :after like link_to_remote

ruby-on-rails - Google Analytics(分析)性能影响?

javascript - 如何将 mvc 方法应用于 Nodejs - Express 应用程序中的 app.js 文件

ruby - 如何将 var 分配给哈希?

ruby - 如何合并两个哈希数组?

ruby - 为什么 Enumerable 在 Ruby 中没有长度属性?

javascript - 如何向现有用户添加新字段

node.js - Heroku 连接 MONGODB 图集

php - sha512 可能的输出字符是什么?