2012-06-19 7 views
5

Ich bin sehr frustriert, wie ich versuche, die Ergebnisse eines Mongoid-Kriterien abzufragen und nur die Dokumente zu behalten, wo ein Feld verschieden ist. Und das tun:Wie erhalten Sie eindeutige Ergebnisse von einem Mongoid-Kriterium?

Books.all.distinct(:name) 

..nur die Namen Felder, nicht die Dokumente.

Auch die Verwendung der uniq Schleife, wie in einer anderen Frage hier angegeben, funktioniert nicht für mich.

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

Was fehlt mir hier?

+0

Gibt es eine Möglichkeit, dies in der Datenbankschicht zu tun, anstatt es in Ruby zu filtern? – Avishai

Antwort

0

Ich bin mir nicht sicher, ob ich vollständig verstehe, was Sie erreichen wollen? Hat das Feld "Name" in Ihrer Datenbank eine eindeutige Einschränkung?

Wenn dies der Fall ist, rufen Sie einfach alle Büchernamen ab, um die Bücher selbst abzurufen, die Sie das Basisobjekt nennen würden.

Wenn nicht, wird es mehrere Bücher für jeden Namen geben, die keinen Sinn ergeben, mit distinct zu greifen. Vielleicht suchen Sie eine Groupby-Funktion? Um alle Bücher mit demselben Namen zu gruppieren, können Sie Books.all.group_by{|book| book.name} aufrufen, aber da dies für den Webserver und nicht für eine Datenbankebene ausgeführt wird, ist es für eine angemessene Anzahl von Datensätzen sehr langsam.

Ihre beste Wette ist wahrscheinlich eine der zu folgenden Aktionen:

0

OP gehend zu erhalten, Ihr Problem ist, dass Sie jedes Buch mit einem eindeutigen Namen wollen.

Dieses Problem dabei ist, dass können Sie sagen 98 einzigartige Bücher haben, und zwei Bücher mit dem gleichen Namen

Wenn Sie Ihre Datenbank fragen: „Gib mir alle eindeutig benannte Buch“ Es werden die ersten 98 Bücher finden , dann wird es in die letzten zwei gehen.

Welches der beiden Bücher mit dem gleichen Namen sollte es zurückgeben? Da es angesichts der Detailgenauigkeit keine richtige Antwort auf diese Frage gibt, macht etwas wie eine hypothetische .uniq keinen Sinn.

Verwandte Themen