埋め込みドキュメントに対してクエリを実行するときの 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がこれらのケースをどのように処理するかについて、誰か親切に教えてくれませんか?