2

私はmongodbとmongoidgemを使用していますが、アドバイスをお願いします。

私はユーザーhas manyマーケットとマーケットhas many製品を扱うアプリを持っています。ユーザーが所有するすべての(または任意の)市場で、たとえば特定の価格帯で製品を検索する必要があります。

埋め込まれた関係と参照された関係のどちらがこれに適していますか?

私は現在参照を使用していますが、そのように見えます

class User
  has_many :markets
end

class Market
  belongs_to :user
  has_many :products
end

class Product
  belongs_to :calendar
  belongs_to :user
end

そして検索には、このクエリを使用します

Product.where(user_id: current_user.id).
  in(market_id: marked_ids).
  where(:price.gte => price)

mongdbはドキュメント指向のデータベースなので、このような状況で埋め込みドキュメントを使用した場合、パフォーマンスやデザインにメリットがありますか?

4

2 に答える 2

3

あなたの場合、参照データを使用することをお勧めします。これらの各コレクションを独自に操作する必要があると思います(_idで「製品」を編集/削除/更新できる必要があり、その他の複雑なクエリを実行できる必要があります。これは、個別に作成するとはるかに簡単で効果的です。コレクション)。

同時に、訪問者のブラウザへの表示を高速化するために、完全に埋め込まれたデータをユーザーコレクションに保存しますユーザーのプロフィールとトップ5の市場およびトップ20の製品を表示したいユーザーのページがあるとします。これらの最新のトップ5およびトップ20をユーザーのドキュメントに埋め込み、新しい市場/製品がある場合はそれらの埋め込みオブジェクトを更新できます。この場合、ユーザーのページを表示するときに、MongoDBに対して1つのクエリを実行するだけで済みます。したがって、これはキャッシュとして機能します。訪問者がさらに多くの製品を表示する必要がある場合は、次のページ「製品」に移動し、MongoDBの個別の「製品」コレクションを照会します。

于 2012-11-16T05:14:21.903 に答える
1

親クラスを介してアイテムにアクセスするだけでよい場合は、埋め込みドキュメントを使用してください。直接または複数のオブジェクトからクエリを実行する必要がある場合は、参照を使用してください。

于 2012-11-16T00:30:40.577 に答える