私もeコマースのウェブサイトを運営しています。これが、あなたが言及した機能をどのように実装するかについての私のアドバイスです。お役に立てば幸いです。
- カテゴリ
私はそれらを平らな構造に整理します。あなたの場合は次のようになります:
{_id: 1, name: "Electronics", parentId: 0, idPath: "/0/1/" ...}
{_id: 2, name: "Computers", parentId: 1, idPath: "/0/1/2/", ...}
{_id: 3, name: "Graphic Cards", parentId: 2, idPath: "/0/1/2/3/", ...}
そして、製品は今や葉のカテゴリーにのみある必要があります。あなたの場合:
{
_id: asdasfwetrw34tw34t245y45y,
name: "NVIDIA GTX670",
price: 99.50,
...
...
categoryIds: [3]
}
もちろん、商品は複数のカテゴリに分類される可能性があるため、 categoryIds
配列のままです。ここで注意が必要な部分があります。 Electronics
をリストする場合 カテゴリでは、次の方法ですべてのサブカテゴリを見つけることができます:
db.categories.find({idPath: /^\/0\/1/})
idPath
インデックスはここで機能するので、高速になります。すべてのサブカテゴリを見つけると、その中のすべての製品を簡単に見つけることができます( categoryIds
でインデックスを作成します) 製品
の コレクション)。
または、すべてのカテゴリをメモリに読み込んで、key-> categoryId、value->[すべてのサブカテゴリ]を使用してハッシュテーブルを作成することもできます。通常、カテゴリは頻繁に変更されることはなく、多くのカテゴリはありません。したがって、問題はありません。
- タグ/オプション
まず第一に、あなたのカテゴリーに何か問題があると思います。 女性のファッション
は一般的なものであり、製品をより具体的なものに配置する必要があり、オプションもそこにある必要があります。たとえば、カテゴリcoat
があるかもしれません size
があります & color
、女性のファッション
以外 。 color
がまだあるかもしれませんが 女性ファッション
のオプション これは、すべてのサブカテゴリに共通の特徴であるためです。
考えてみると、すべてのサブカテゴリが1つの親カテゴリにまとめられているのはなぜですか。彼らには共通点があるからです。その共通部分は、親カテゴリの共通オプションである必要があります。つまり、すべての親カテゴリとサブカテゴリの間に継承が存在する必要があります。例:
次にcoat
最終的に2つのオプションcolor
があります &サイズコード> 。
サングラス
: color
& shape
。 女性のファッション
を表示しているとき 、オプションは1つだけです color
。 womenfashion
から継承しているため、サブカテゴリもフィルタリングします 。
色の値に関しては、私の考えは標準色のみを使用することですストロベリーレッド
実際にはred
、タンジェリン
実際にはorange
。製品をフィルタリングするときに、それらが実際に表示されることは望ましくありません。そうしないと、オプションが多すぎて、ユーザーエクスペリエンスに間違いなく良くありません。
ただし、 color
以外に カテゴリからのオプション、私のサイトにはカスタマイズ可能なオプション
と呼ばれるものもあります 。これらのオプションは、製品でのみ定義されています。カテゴリを表示しているときに表示されることはありません。ここでは、 Strawberry Red
を使用できます &タンジェリン
。私の意見では、これらは製品の「自然な」特性ではありません。これらは、ユーザーが製品をより快適に見られるようにするためにのみ使用されます。したがって、 Tangerine with figure
のようなこの種のオプションも使用できます。 など
オプションについてもう1つ。製品のフィルタリングに使用されるオプションをマークすることをお勧めします。例: color
間違いなく1つです。 寸法コード> そうではないかもしれません。
オプションの種類について。それがあなたにとって十分であるならば、あなたは大丈夫です。 Number
のようなタイプがたくさんあります 、 String
、単一選択
、複数の選択肢
。 Unit
も実装する予定です 。 Unit
のトリッキーな部分 たとえば
1GB = 1024MB = 1024*1024B
したがって、1GBと1TBのハードディスクを入手した場合は、製品をフィルタリングする前に変換を行うことをお勧めします。これは、私があなたの質問に戻るトピックから外れています。
異なるカテゴリのオプションは同じ名前ですが、注意してください。それらはおそらく同じものではありません。 素材コード>
コート
の およびFurniture
2つの異なるものです。そのため、カテゴリごとに異なるオプションを定義する傾向があります。したがって、おそらく color
おもちゃ
の場合 、および color
女性のファッション
。あるレベルから、サブカテゴリが同じオプションを共有し始めるため、これは上記の継承と競合しません。これは、カテゴリ構造の編成方法に完全に関連しています。また、カテゴリ構造を変更したり、製品を移動したりする場合は、苦痛になります。したがって、カテゴリを定義するときは注意してください。
それが私の頭に浮かぶすべてです。私は英語を母国語としないので、私の答えの一部を理解するのが難しいかもしれません。お気軽にお知らせください。