Mongoid lub składnia zapytań
Trzeba o to pytać, ale jest to bardzo słabo udokumentowane. Nie ma żadnej wzmianki na http://mongoid.org/en/mongoid/docs/querying.html
Próbuję sprawdzić, czy użytkownik istnieje( poniżej jest zapytanie i), jak mogę go zmienić na zapytanie typu OR
Username.where(:username=>@username, :email=>@email)
(e-mail lub nazwa użytkownika muszą być zgodne).
Znalazłem kilka dość skomplikowanych sposobów w Internecie, w tym wysyłanie bezpośredniego javascript (z): http://omarqureshi.net/articles/2010-6-17-using-or-in-mongoid
Na pewno musi istnieć prosta, przejrzysta składnia, aby to zrobić poprawnie?
5 answers
Kiedyś to było lepiej udokumentowane. Spróbuj tego:
Username.any_of({:username => @username},
{:email => @email})
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-21 15:56:58
Dla dobra innych, którzy kończą na tej stronie, zaktualizowana składnia jest teraz
Username.or({username: @username}, {email: @email})
Proszę zapoznać się z zaktualizowanymi dokumentami lub odpowiednimi impl.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-19 04:51:58
W odpowiedzi @miguel-savignano jest literówka. Według Stackoverflow "Kolejka edycji jest pełna", dlatego nie wysłałem edycji.
Właściwa składnia:
Username.or({username: @username}).or({email: @email})
Bardziej zwięzłe rozwiązanie:
Username.or({username: @username}, {email: @email})
Selektor Mongo rozwiąże się do:
{"$or"=>[{"username"=>@username}, {"email"=>@email}]}
Znalazłem to pytanie, gdy próbowałem rozwiązać dla tworzenia zapytań "lub".
Jeśli chcesz dopasować łańcuch znaków lub dowolny z tablicy elementów, musisz napisać Zapytanie Mongoid z selektorem Mongo '$in'.
Na przykład, masz określoną nazwę użytkownika i tablicę wiadomości e-mail. Chcesz zwrócić wszystkie wyniki, w których co najmniej jedno z pól pasuje do nazwy użytkownika lub jednego z e-maili w tablicy.
@username = "jess"
@emails = ["[email protected]", "[email protected]", "[email protected]"]
User.or({username: ""}, {email: {'$in': @emails}})
Selektor Mongo rozwiąże się do:
{"$or"=>[{"first_name"=>""}, {"email"=>{:$in=>["[email protected]", "[email protected]", "[email protected]"]}}]}
- jeśli masz
Users
z 2 z 3 e-maili w bazie danych, selektor zwróci liczbę 2. - jeśli masz
User
zusername
"jess" i 3 dodatkoweUsers
każdy z jednym z podanych e-maili, następnie selektor zwróci liczbę 4.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-28 02:15:22
Również w Mongoid 5.0, jeśli nadal chcesz używać metody where
, użyj następującej metody
Username.where('$or' => [ { username: @username }, { email: @email } ])
Jest to bardzo przydatne, gdy budujesz rodzaj hasha zapytania w sposób dynamiczny i musisz zachować metodę where
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-22 00:50:09
W Mongoid 5.0 to działa dla mnie
Username.or({username: @username}).or({email: @email})
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-16 12:03:40