Es ist ein Tippfehler in @ miguel-savignano Antwort. Laut Stackoverflow ist die "Editierwarteschlange voll", weshalb ich keine Bearbeitung eingereicht habe.
richtige Syntax:
Username.or({username: @username}).or({email: @email})
Eine knappe Lösung:
Username.or({username: @username}, {email: @email})
Der Wähler Mongo wird lösen zu:
{"$or"=>[{"username"=>@username}, {"email"=>@email}]}
ich diese Frage gefunden, wie ich war versuchen zu lösen für die Erstellung " oder "Abfragen.
Wenn Sie nach einem String oder einem Array aus Elementen suchen, müssen Sie eine Mongoid-Abfrage mit dem Mongo-Selektor '$ in' schreiben.
Zum Beispiel haben Sie einen bestimmten Benutzernamen und ein Array von E-Mails. Sie möchten alle Ergebnisse zurückgeben, bei denen mindestens eines der Felder mit dem Benutzernamen oder einer der E-Mails innerhalb des Arrays übereinstimmt.
@username = "jess"
@emails = ["[email protected]", "[email protected]", "[email protected]"]
User.or({username: ""}, {email: {'$in': @emails}})
Der Wähler Mongo wird lösen zu:
{"$or"=>[{"first_name"=>""}, {"email"=>{:$in=>["[email protected]", "[email protected]", "[email protected]"]}}]}
- Wenn Sie
Users
mit 2 der 3 E-Mails in Ihrer Datenbank haben, dann wird der Wähler
- eine Zählung von 2. Rückkehr Wenn Sie eine
User
mit der username
"jess" und 3 zusätzliche Users
jeweils mit einer der angegebenen E-Mails haben, dann wird der Selektor eine Anzahl von 4 zurückgeben.
behalten In den Bereichen müssen Sie noch 'any_of' verwenden, sonst wird es einen Syntaxfehler werfen. – aledalgrande
Der angegebene Link sagt nichts über '.or' oder' any_of', bitte [hier] (https://github.com/mongodb/mongoid/blob/master/lib/mongoid/criteria/queryable/selectable. rb) um detaillierte Dokumentation und Implementierung zu sehen – silva96
Sie können auch self.or in Bereichen verwenden (weil 'or' ist ein Schlüsselwort in Ruby) – Shiyason