这必须要求很多,但记录很差。 http://mongoid.org/en/mongoid/docs/querying.html
没有提及我正在尝试检查用户是否存在(下面是AND查询),如何将其更改为OR
类型查询
Username.where(:username=>@username, :email=>@email)
(电子邮件或用户名必须匹配)。
我在网上发现了一些非常复杂的方式,包括发送直接的javascript(来自):http://omarqureshi.net/articles/2010-6-17-using-or-in-mongoid
当然,必须有一个简单明了的语法来正确地执行此操作吗?
答案 0 :(得分:114)
为了结束此页面的其他人,现在更新语法
Username.or({username: @username}, {email: @email})
答案 1 :(得分:48)
是的,这曾经被证明更好。试试这个:
Username.any_of({:username => @username},
{:email => @email})
答案 2 :(得分:5)
@ miguel-savignano的回复中有一个错字。根据Stackoverflow,"编辑队列已满#34;这就是我没有提交编辑的原因。
正确的语法:
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
,则选择器将返回2个。User
username
" jess"另外3个Users
每个都有一个给定的电子邮件,然后选择器将返回4个。答案 3 :(得分:5)
此外,在Mongoid 5.0中,如果您仍想使用where
方法,请使用以下
Username.where('$or' => [ { username: @username }, { email: @email } ])
当您以动态方式构建一种查询哈希并且需要保留where
方法
答案 4 :(得分:2)
在Mongoid 5.0中,这对我有用
{{1}}