Aks*_*hat 42 ruby-on-rails mongoid
这必须要求很多,但记录很差.http://mongoid.org/en/mongoid/docs/querying.html没有提及
我正在尝试检查用户是否存在(下面是AND查询),如何将其更改为OR类型查询
Username.where(:username=>@username, :email=>@email)
Run Code Online (Sandbox Code Playgroud)
(电子邮件或用户名必须匹配).
我在网上发现了一些非常复杂的方法,包括发送直接的javascript(来自):http://omarqureshi.net/articles/2010-6-17-using-or-in-mongoid
当然必须有一个简单明确的语法来正确地做到这一点?
Jam*_*Lim 114
为了结束此页面的其他人,现在更新语法
Username.or({username: @username}, {email: @email})
Run Code Online (Sandbox Code Playgroud)
Ser*_*sev 48
是的,这曾经被证明更好.试试这个:
Username.any_of({:username => @username},
{:email => @email})
Run Code Online (Sandbox Code Playgroud)
在 Mongoid 5.0 中,这对我有用
Username.or({username: @username}).or({email: @email})
Run Code Online (Sandbox Code Playgroud)
小智 5
@ miguel-savignano的回复中有一个错字.根据Stackoverflow,"编辑队列已满",这就是我没有提交编辑的原因.
正确的语法:
Username.or({username: @username}).or({email: @email})
Run Code Online (Sandbox Code Playgroud)
更简洁的解决方案:
Username.or({username: @username}, {email: @email})
Run Code Online (Sandbox Code Playgroud)
Mongo选择器将解析为:
{"$or"=>[{"username"=>@username}, {"email"=>@email}]}
Run Code Online (Sandbox Code Playgroud)
当我试图解决创建"或"查询时,我发现了这个问题.
如果您希望匹配字符串或任何一个元素,那么您将需要使用Mongo'$ in'选择器编写Mongoid查询.
例如,您有一个特定的用户名和一组电子邮件.您希望返回所有结果,其中至少有一个字段与用户名或数组中的一个电子邮件匹配.
@username = "jess"
@emails = ["hi@mail.com", "test@mail.com", "foo@mail.com"]
User.or({username: ""}, {email: {'$in': @emails}})
Run Code Online (Sandbox Code Playgroud)
Mongo选择器将解析为:
{"$or"=>[{"first_name"=>""}, {"email"=>{:$in=>["hi@mail.com", "test@mail.com", "foo@mail.com"]}}]}
Run Code Online (Sandbox Code Playgroud)
Users的数据库中有3封电子邮件中的2封,则选择器将返回2的计数.User与username"杰斯"和3个额外的Users每一个给定的电子邮件中的一个,然后选择将返回4计数.小智 5
另外,在Mongoid 5.0中,如果仍要使用该where方法,请使用以下命令
Username.where('$or' => [ { username: @username }, { email: @email } ])
Run Code Online (Sandbox Code Playgroud)
当您以动态方式构建一种查询哈希并且需要保留该where方法时,这非常有用
| 归档时间: |
|
| 查看次数: |
19062 次 |
| 最近记录: |