2012-06-19 6 views
5

Estoy muy frustrado cuando trato de consultar los resultados de un criterio de Mongoid y solo guardo los documentos donde un campo es distinto. Y haciendo esto:¿Cómo obtener resultados distintos de un criterio de Mongoid?

Books.all.distinct(:name) 

..only devuelve los campos de nombre, no los documentos.

También usar el ciclo uniq como se indica en otra pregunta aquí no funciona para mí.

Books.all.uniq{|x| x.name} # Returns non-unique results 

¿Qué es lo que falta aquí?

+0

¿Hay alguna manera de hacer esto en la capa de la base de datos, en lugar de filtrarlo en Ruby? – Avishai

Respuesta

0

No estoy seguro de entender por completo lo que está intentando lograr? ¿El campo 'nombre' en su base de datos tiene una restricción única sobre él?

Si es así, simplemente está recuperando todos los nombres de los libros, para recuperar los libros mismos que llamaría el objeto base.

De lo contrario, habrá varios libros para cada nombre, lo que no tiene sentido para distinguirlos. Quizás lo que estás buscando es una función groupby? Para agrupar todos los libros con el mismo nombre, puede llamar al Books.all.group_by{|book| book.name}, pero como esto se ejecuta contra el servidor web en lugar de a nivel de base de datos, será muy lento para cualquier cantidad razonable de registros.

Su mejor apuesta es probablemente hacer una de las siguientes:

0

OP, el problema es que desea cada libro con un nombre único.

Este problema con esto es que digamos que usted tiene 98 libros únicos, y 2 libros con el mismo nombre

Si le preguntas a la base de datos: "Dame todos los libros de nombre único" Va a encontrar los primeros 98 libros , entonces se encontrará con los dos últimos.

¿Cuál de los dos libros con el mismo nombre debería devolver? Como no hay una respuesta correcta a esta pregunta dado el nivel de detalle, algo como un .uniq hipotético no tiene sentido.

Cuestiones relacionadas