我非常沮喪,因爲我試圖查詢一個Mongoid標準的結果,並只保留字段不同的文檔。並執行此操作:如何從Mongoid標準中獲得不同的結果?
Books.all.distinct(:name)
..僅返回名稱字段,而不是文檔。
同樣使用uniq
循環在另一個問題中所述不適用於我。
Books.all.uniq{|x| x.name} # Returns non-unique results
我在這裏錯過了什麼?
我非常沮喪,因爲我試圖查詢一個Mongoid標準的結果,並只保留字段不同的文檔。並執行此操作:如何從Mongoid標準中獲得不同的結果?
Books.all.distinct(:name)
..僅返回名稱字段,而不是文檔。
同樣使用uniq
循環在另一個問題中所述不適用於我。
Books.all.uniq{|x| x.name} # Returns non-unique results
我在這裏錯過了什麼?
我不確定我完全理解你正試圖實現什麼?數據庫中的'name'字段是否有唯一的約束?
如果是這樣,那麼您只需檢索所有書籍名稱,即可檢索書本本身,然後調用基本對象。
如果沒有,每個名稱將會有多個書籍,這對於以獨特方式抓取是沒有意義的。也許你正在尋找的是一個groupby函數?要將具有相同名稱的所有書籍分組,您可以撥打Books.all.group_by{|book| book.name}
,但由於這是針對Web服務器運行的,而不是在數據庫級別,因此對於任何合理數量的記錄都會非常緩慢。
您最好的選擇可能是做下列操作之一:
OP,你的問題是,你希望每本書一個獨特的名字。
這個問題本是可以說你有98點獨特的書,兩本書的同名
如果你問你的數據庫:「給我所有的唯一命名的書」這將找到的第98本書,那麼它會碰到最後兩個。
這兩本同名的書應該返回哪一本?由於對這個問題沒有正確的答案,因爲細節的程度,像假想的.uniq這樣的東西沒有意義。
有沒有辦法在數據庫層做到這一點,而不是在Ruby中過濾? – Avishai