2012-06-19 14 views
5

Sono molto frustrato mentre cerco di interrogare i risultati di un criterio Mongoid e di conservare solo i documenti in cui un campo è distinto. E facendo questo:Come ottenere risultati distinti da un criterio Mongoide?

Books.all.distinct(:name) 

.. restituisce solo i campi del nome, non i documenti.

Anche l'utilizzo del ciclo uniq come indicato in un'altra domanda qui non funziona per me.

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

Cosa mi manca qui?

+0

C'è un modo per farlo nel livello del database, invece di filtrarlo in Ruby? – Avishai

risposta

0

Non sono sicuro di comprendere appieno ciò che si sta tentando di raggiungere? Il campo "nome" nel tuo database ha un vincolo univoco su di esso?

Se è così, stai semplicemente recuperando tutti i nomi di libri, per recuperare i libri stessi che chiameresti l'oggetto di base.

In caso contrario, ci saranno più libri per ogni nome, che non ha senso afferrare con distinti. Forse quello che stai cercando è una funzione di groupby? Per raggruppare tutti i libri con lo stesso nome, è possibile chiamare Books.all.group_by{|book| book.name}, ma poiché viene eseguito sul server Web anziché a livello di database, sarà molto lento per qualsiasi quantità ragionevole di record.

La cosa migliore è probabilmente quello di eseguire una delle seguenti operazioni:

0

OP, il problema è che si desidera ogni libro con un nome univoco.

Questo problema con questo è che supponiamo di avere 98 libri unici e 2 libri con lo stesso nome

Se chiedete al vostro database: "Dammi tutti i libri con nome univoco" Sarà trovare i primi 98 libri , quindi si imbatterà negli ultimi due.

Quale dei due libri con lo stesso nome dovrebbe restituire? Dato che non c'è una risposta giusta a questa domanda dato il livello di dettaglio, qualcosa come un ipotetico .uniq non ha senso.

Problemi correlati