Mongoid或查询语法(Mongoid OR query syntax)

2019-07-01 14:47发布

这必须要求很多,但它是记录非常糟糕。 没有提到在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

当然,必须有一种简单清晰的语法正确地做到这一点?

Answer 1:

是啊,这曾经被记录在案更好。 试试这个:

Username.any_of({:username => @username},
                {:email => @email})


Answer 2:

对于其他人谁这个网页上结束了的缘故,更新的语法是现在

Username.or({username: @username}, {email: @email})

请参考最新的文档或相关IMPL 。



Answer 3:

有一个在@米格尔-的Savignano的回应错字。 据#1“编辑队列已满”,这就是为什么我没有提交修改。

正确的语法:

Username.or({username: @username}).or({email: @email})

一个更简洁的解决方案:

Username.or({username: @username}, {email: @email})

蒙戈选择将解析为:

{"$or"=>[{"username"=>@username}, {"email"=>@email}]}

我发现这个问题,因为我试图解决创建“或”查询。

如果你正在寻找匹配的字符串或元素的数组中的任何一个,那么你就需要写有“在$”选择蒙戈一个Mongoid查询。

例如,你有一个特定的用户名和电子邮件的数组。 您想返回所有结果,其中字段的至少一个无论是用户名或阵列内电子邮件的一个相匹配。

@username = "jess"
@emails = ["hi@mail.com", "test@mail.com", "foo@mail.com"]
User.or({username: ""}, {email: {'$in': @emails}})

蒙戈选择将解析为:

{"$or"=>[{"first_name"=>""}, {"email"=>{:$in=>["hi@mail.com", "test@mail.com", "foo@mail.com"]}}]}
  • 如果有Users在数据库中的3封电子邮件的2,然后选择将返回计数2。
  • 如果你有一个Userusername “杰斯”和另外3个Users每个给定的电子邮件中的一个,然后选择将返回4计数。


Answer 4:

此外,在Mongoid 5.0,如果你仍然想使用where的方法,请使用以下

Username.where('$or' => [ { username: @username }, { email: @email } ])

这是当你正在建设一个类型的查询哈希以动态的方式是非常有用的,你需要保持where方法



Answer 5:

在Mongoid 5.0,这对我的作品

Username.or({username: @username}.or({email: @email})


文章来源: Mongoid OR query syntax