有一個在@米格爾-的Savignano的迴應錯字。根據Stackoverflow的「編輯隊列已滿」,這就是爲什麼我沒有提交編輯。
正確的語法:
Username.or({username: @username}).or({email: @email})
一個更簡潔的解決方案:
Username.or({username: @username}, {email: @email})
蒙戈選擇將解析:
{"$or"=>[{"username"=>@username}, {"email"=>@email}]}
我發現這個問題,因爲我是試圖解決創造「或「查詢。
如果你想要匹配一個字符串或元素數組中的任何一個,那麼你將需要用Mongo'$ in'選擇器編寫一個Mongoid查詢。
例如,您有一個特定的用戶名和一組電子郵件。您希望返回所有結果,其中至少有一個字段與數組中的用戶名或電子郵件中的一個匹配。
@username = "jess"
@emails = ["[email protected]", "[email protected]", "[email protected]"]
User.or({username: ""}, {email: {'$in': @emails}})
蒙戈選擇將解析:
{"$or"=>[{"first_name"=>""}, {"email"=>{:$in=>["[email protected]", "[email protected]", "[email protected]"]}}]}
- 如果你有
Users
與數據庫中的3封電子郵件的2,然後選擇將返回2.
- 計數如果你有一個
User
和username
「jess」和另外3個Users
,每個都有一個給定的電子郵件,那麼選擇器將返回一個4的計數。
在範圍中,您仍然必須使用'any_of',否則會引發語法錯誤。 – aledalgrande
發佈的鏈接不會告訴任何關於'.or'和'any_of'的信息,請參考[here](https://github.com/mongodb/mongoid/blob/master/lib/mongoid/criteria/queryable/selectable)。 rb)來查看詳細的文檔和實現 – silva96
你也可以在作用域中使用self.or(因爲'或'是ruby中的關鍵字) – Shiyason