2012-06-19 49 views
5

我非常沮喪,因爲我試圖查詢一個Mongoid標準的結果,並只保留字段不同的文檔。並執行此操作:如何從Mongoid標準中獲得不同的結果?

Books.all.distinct(:name) 

..僅返回名稱字段,而不是文檔。

同樣使用uniq循環在另一個問題中所述不適用於我。

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

我在這裏錯過了什麼?

+0

有沒有辦法在數據庫層做到這一點,而不是在Ruby中過濾? – Avishai

回答

0

我不確定我完全理解你正試圖實現什麼?數據庫中的'name'字段是否有唯一的約束?

如果是這樣,那麼您只需檢索所有書籍名稱,即可檢索書本本身,然後調用基本對象。

如果沒有,每個名稱將會有多個書籍,這對於以獨特方式抓取是沒有意義的。也許你正在尋找的是一個groupby函數?要將具有相同名稱的所有書籍分組,您可以撥打Books.all.group_by{|book| book.name},但由於這是針對Web服務器運行的,而不是在數據庫級別,因此對於任何合理數量的記錄都會非常緩慢。

您最好的選擇可能是做下列操作之一:

0

OP,你的問題是,你希望每本書一個獨特的名字。

這個問題本是可以說你有98點獨特的書,兩本書的同名

如果你問你的數據庫:「給我所有的唯一命名的書」這將找到的第98本書,那麼它會碰到最後兩個。

這兩本同名的書應該返回哪一本?由於對這個問題沒有正確的答案,因爲細節的程度,像假想的.uniq這樣的東西沒有意義。