@miguel-savignano 的回复中有一个错字。根据 Stackoverflow 的“编辑队列已满”,这就是我没有提交编辑的原因。
正确的语法:
Username.or({username: @username}).or({email: @email})
更简洁的解决方案:
Username.or({username: @username}, {email: @email})
Mongo 选择器将解析为:
{"$or"=>[{"username"=>@username}, {"email"=>@email}]}
我在尝试解决创建“或”查询时发现了这个问题。
如果您要匹配一个字符串或任何一个元素数组,那么您需要使用 Mongo '$in' 选择器编写一个 Mongoid 查询。
例如,您有一个特定的用户名和一组电子邮件。您希望返回至少有一个字段与数组中的用户名或电子邮件之一匹配的所有结果。
@username = "jess"
@emails = ["hi@mail.com", "test@mail.com", "foo@mail.com"]
User.or({username: ""}, {email: {'$in': @emails}})
Mongo 选择器将解析为:
{"$or"=>[{"first_name"=>""}, {"email"=>{:$in=>["hi@mail.com", "test@mail.com", "foo@mail.com"]}}]}
- 如果您
Users
的数据库中有 3 封电子邮件中有 2 封,则选择器将返回计数 2。
- 如果您有一个
User
带有username
“jess”的邮件,另外还有 3Users
个带有给定电子邮件的邮件,那么选择器将返回 4 个计数。