2012-06-19 11 views
5

Jestem bardzo sfrustrowany, gdy próbuję sprawdzać wyniki kryteriów Mongoid i przechowywać tylko te dokumenty, w których pole jest odrębne. Robiąc to:Jak uzyskać wyraźne wyniki z kryteriów Mongoid?

Books.all.distinct(:name) 

.. tylko zwraca pola nazw, a nie dokumenty.

Używanie pętli uniq, jak podano w innym pytaniu, nie działa dla mnie.

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

Co ja tu brakuje?

+0

Czy istnieje sposób, aby to zrobić w warstwie bazy danych, zamiast filtrowania go w Ruby? – Avishai

Odpowiedz

0

Nie jestem pewien, czy w pełni rozumiem, co próbujesz osiągnąć? Czy pole 'name' w twojej bazie danych ma wyjątkowe ograniczenie?

Jeśli tak, to po prostu pobiera się wszystkie nazwy książek, aby pobrać książki, które można nazwać obiektem bazowym.

Jeśli nie, będzie wiele książek dla każdego nazwiska, co nie ma sensu chwytać za różne. Być może to, czego szukasz, to funkcja grupowa? Aby pogrupować wszystkie książki o tej samej nazwie, możesz zadzwonić pod numer Books.all.group_by{|book| book.name}, ale ponieważ jest on uruchamiany na serwerze WWW, a nie na poziomie bazy danych, będzie on bardzo powolny dla każdej rozsądnej ilości rekordów.

Najprościej jest prawdopodobnie wykonać jedną z następujących czynności:

0

OP, Twój problem jest, że chcesz każdą książkę z unikalną nazwą.

Problem polega na tym, że pozwala powiedzieć masz 98 unikalnych książek i 2 książki o tej samej nazwie

Jeśli zapytać bazy danych: „Daj mi co jednoznacznie nazwie książkę” znajdzie pierwszych 98 książek , a następnie trafi do dwóch ostatnich.

Która z dwóch książek o tej samej nazwie powinna zostać zwrócona? Ponieważ nie ma właściwej odpowiedzi na to pytanie, biorąc pod uwagę poziom szczegółowości, coś w rodzaju hipotetycznego .uniq nie ma sensu.