@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クエリを作成する必要があります。
たとえば、特定のユーザー名と一連の電子メールがあります。少なくとも1つのフィールドがユーザー名または配列内の電子メールの1つと一致するすべての結果を返したいと考えています。
@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"]}}]}
- データベースに3つの電子メールのうち2つがある場合
Users
、セレクターは2のカウントを返します。
- 「jess」を含むa
User
と、指定された電子メールの1つを含む3つの追加がある場合、セレクターは4のカウントを返します。username
Users