3

配列内のアイテムの数に基づいて並べられたアイテムのコレクションを選択したいと思います。うまくいけば、次の例が私のかなり貧弱な説明を明確にするでしょう:

class Thing
  include MongoMapper::Document

  key :name, String
  key :tags, Array
end

Thingタグが最も多いものから最も少ないものの順に並べられたすべての を取得したいと思います。この例のタグは、tags 配列内の単純な文字列です。基本的に、これと同じ意味のものが欲しいです(しかし機能します):

Thing.all(:order => 'tags.count desc')

これは可能ですか?

4

1 に答える 1

3

コア サーバーは現在、配列のサイズの計算とそれによる並べ替えをサポートしていません。現時点での最善の策は、配列サイズを自分でキャッシュし、そのフィールドにインデックスを追加することだと思います。

class Thing
  include MongoMapper::Document

  key :name,     String
  key :tags,     Array
  key :tag_size, Integer, :default => 0, :index => true
end

次に、保存時に tag_size を更新するコールバックをモデルに追加するだけです。

これがコア サーバに必要な機能である場合は、ここにケースを追加できます。

http://jira.mongodb.org/browse/SERVER

于 2010-01-24T16:09:00.490 に答える