2

埋め込みドキュメントに対してクエリを実行するときの Mongoid のパフォーマンスを把握しようとしています。私は Mongoid と MongoDB にまったく慣れていないので、悪い習慣だと思うものを見つけたら教えてください。

ユースケース:

多くのコメントが埋め込まれた「投稿」があるとします。コメントはスレッド化され、スレッド化された各コメントには、属する親コメントを指定する parent_id フィールドがあります。「投稿」ドキュメントの例:

{ 
  "_id": 1, "username": "Foo", "body": "Hi!", 
  "comments": [ 
                {"_id": 123, "body": "<3"}, 
                {"_id": 124, "body": "</3", "parent_id": "123"}, 
                ... 
              ]
}

ここで、投稿に大量のコメントが含まれているとします。新しいコメントを保存するとき、新しいコメントがその親を共有するコメントの数を決定したいと考えています。だから私はこれを行います:

class Comment
  include Mongoid::Document
  field :body
  field :parent_id
  embedded_in :post, :inverse_of => :comments

  before_save :determine_amount
  def determine_amount
    return if self.parent_id.blank?
    amount = self.node.comment.where(:parent_id => self.parent_id).count

    # Do something with it...
  end
end

Mongoid がこのクエリを実行する場所と方法、およびこのクエリの効率性について疑問に思っています。私の知る限り、クエリはデータベースにヒットしません。トピック ドキュメントは既に読み込まれており、コメントはそのサブドキュメントであるため、これは理にかなっています。

Mongoidがこれらのケースをどのように処理するかについて、誰か親切に教えてくれませんか?

4

0 に答える 0