2012-06-19 11 views
5

私はMongoid基準の結果を照会し、フィールドが異なる文書のみを保持しようとすると、非常に不満です。これを行う:モンゴイド基準から明確な結果を得るにはどうすればよいですか?

Books.all.distinct(:name) 

..ドキュメントではなく名前フィールドを返します。

また、別の質問に記載されているようにループがuniqループを使用していると、ここでは機能しません。

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

私はここで何が欠けていますか?

+0

Rubyでフィルタリングするのではなく、データベースレイヤでこれを行う方法はありますか? – Avishai

答えて

0

達成しようとしていることを十分に理解できていませんか?データベース内の「名前」フィールドには固有の制約がありますか?

もしそうなら、すべての書籍名を取得するだけで、基本オブジェクトと呼ばれる本自体を取得できます。

もしそうでなければ、名前ごとに複数の本がありますが、区別するためには意味をなさない。あなたが探しているのはおそらくgroupby関数ですか?すべての書籍を同じ名前でグループ化するには、Books.all.group_by{|book| book.name}と呼ぶことができますが、これはデータベースレベルではなくWebサーバーに対して実行されるため、合理的な量のレコードでは非常に遅くなります。

あなたの最善の策は、次のいずれかを実行するために、おそらくです:

0

OPを軌道に乗るためにいくつかの作業がかかります、あなたの問題は、固有の名前を持つすべての本が欲しいということです。これは、最初の98冊の本を見つけるだろう「私のすべての一意の名前の本を与える」:

これで、この問題は、それはあなたがあなたのデータベースを頼む場合は、98冊のユニークな書籍、同じ名前

との2冊の本を持って言うことができます、それは最後の2つに実行されます。

同じ名前の2冊の本は返されますか?細部のレベルを考えると、この質問に正解はないので、仮想の.uniqのようなものは意味をなさない。

関連する問題