ruby-on-rails - default value mongoid
Sintaxis de consulta de Mongoid OR (5)
Esto debe pedirse mucho pero está muy mal documentado. No hay ninguna mención en http://mongoid.org/en/mongoid/docs/querying.html
Estoy intentando verificar si existe un usuario (a continuación hay una consulta AND), ¿cómo puedo cambiarlo a una consulta de tipo OR
Username.where(:username=>@username, :email=>@email)
(El correo electrónico o el nombre de usuario deben coincidir).
He encontrado algunas formas bastante complicadas en línea, incluido el envío de un javascript directo (de): http://omarqureshi.net/articles/2010-6-17-using-or-in-mongoid
¿Seguramente debe haber una sintaxis clara y simple para hacer esto correctamente?
Además, en Mongoid 5.0, si aún desea utilizar el método where
, use el siguiente
Username.where(''$or'' => [ { username: @username }, { email: @email } ])
Esto es muy útil cuando está creando un tipo de hash de consulta de forma dinámica y necesita mantener el método where
En Mongoid 5.0, esto funciona para mí.
Username.or({username: @username}.or({email: @email})
Hay un error tipográfico en la respuesta de @miguel-savignano. Según , la "cola de edición está llena", por lo que no envié una edición.
Sintaxis adecuada:
Username.or({username: @username}).or({email: @email})
Una solución más concisa:
Username.or({username: @username}, {email: @email})
El selector Mongo se resolverá para:
{"$or"=>[{"username"=>@username}, {"email"=>@email}]}
Encontré esta pregunta cuando intentaba resolver para crear consultas "o".
Si está buscando hacer coincidir una cadena o cualquiera de una matriz de elementos, entonces deberá escribir una consulta de Mongoid con el selector Mongo ''$ in''.
Por ejemplo, tienes un nombre de usuario específico y una gran variedad de correos electrónicos. Le gustaría devolver todos los resultados donde al menos uno de los campos coincida con el nombre de usuario o uno de los correos electrónicos dentro de la matriz.
@username = "jess"
@emails = ["[email protected]", "[email protected]", "[email protected]"]
User.or({username: ""}, {email: {''$in'': @emails}})
El selector Mongo se resolverá para:
{"$or"=>[{"first_name"=>""}, {"email"=>{:$in=>["[email protected]", "[email protected]", "[email protected]"]}}]}
- Si tiene
Users
con 2 de los 3 correos electrónicos en su base de datos, entonces el selector devolverá un conteo de 2. - Si tiene un
User
con elusername
"jess" y 3Users
adicionales cada uno con uno de los correos electrónicos dados, el selector devolverá un conteo de 4.
Por el bien de otros que terminan en esta página, la sintaxis actualizada es ahora
Username.or({username: @username}, {email: @email})
Por favor refiérase a los documentos actualizados o implementos relevantes .
Sí, esto solía ser documentado mejor. Prueba esto:
Username.any_of({:username => @username},
{:email => @email})