2

私はmongodbが初めてです。

いくつかのドキュメントをリストしようとしています。私のクラスにはhas_many関連があります。この関連からのドキュメントの数を表示したいと思います。

熱心な読み込みを行う必要がありますか?

すべてのドキュメントを使用includesすると、ロードされるので、カウントだけが必要です。

ID マップが有効になっています

4

1 に答える 1

0

熱心な読み込みでドキュメント全体が読み込まれないようにする方法がわかりません。それが今可能かどうか知りたいです。

次のようにカウントを取得できます。

ChildDoc.where(myclass_id: myclass_obj.id).count

したがって、関連付けの暗黙的に作成された外部キー フィールドに対してクエリを実行しています。これは依然として親ドキュメントごとのクエリですが、理想的には高速なクエリです。

パフォーマンスが本当に問題である場合は、次のように、より多くのデータを 1 回のトリップで返す単一のクエリを作成できます。含まれているドキュメントのすべての ID です。

ChildDoc.where(myclass_id: {"$in" => list_of_myclass_objs.map {|x| x.id}}).only(:id, :myclass_id)

あなたはこれに慣れていないので、FK フィールドのインデックスを自分で作成したいと思うかもしれないことを付け加えておきます。mongoid はこれを行いません。

class ChildDoc
    include Mongoid::Document
    belongs_to :myclass
    index({ myclass_id: 1 })
end

その後

rake db:mongoid:create_indexes
于 2013-04-06T06:05:58.403 に答える