Saya juga menjalankan situs web e-niaga. Inilah saran saya tentang bagaimana saya menerapkan fitur yang Anda sebutkan. Semoga membantu.
- Kategori
Saya mengaturnya dalam struktur datar, dalam kasus Anda akan menjadi:
{_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/", ...}
Dan produk sekarang hanya perlu dalam kategori daun. Dalam kasus Anda:
{
_id: asdasfwetrw34tw34t245y45y,
name: "NVIDIA GTX670",
price: 99.50,
...
...
categoryIds: [3]
}
Produk bisa dalam beberapa kategori tentunya, jadi categoryIds
tetap sebuah array. Inilah bagian yang sulit. Saat Anda mencantumkan Electronics
kategori, Anda dapat menemukan semua subkategorinya dengan:
db.categories.find({idPath: /^\/0\/1/})
idPath
index berfungsi di sini sehingga akan cepat. ketika Anda menemukan semua sub-kategori, Anda dapat dengan mudah menemukan semua produk di dalamnya (membangun indeks pada categoryIds
dari Product
koleksi).
Atau sebagai alternatif, Anda dapat membaca semua kategori ke dalam memori dan membuat tabel hash dengan kunci->categoryId, nilai->[semua subkategori]. Kategori Anda biasanya tidak akan sering berubah dan Anda tidak akan memiliki banyak kategori. Jadi semuanya akan baik-baik saja.
- Tag/Opsi
Pertama-tama saya pikir ada yang salah dengan kategori Anda. Women fashion
adalah sesuatu yang generik, Anda harus memasukkan produk Anda ke dalam sesuatu yang lebih spesifik, dan pilihannya juga harus ada di sana. Misalnya, mungkin ada kategori coat
yang memiliki size
&color
, selain women fashion
. Mumpung masih ada color
pilihan dalam women fashion
karena itu adalah karakteristik umum dari semua subkategori.
Jika dipikir-pikir, mengapa semua subkategori diatur dalam satu kategori induk? karena mereka memiliki kesamaan. Bagian umum itu harus menjadi opsi umum dari kategori induk. artinya, harus ada warisan antara semua kategori induk dan subkategori. Misalnya:
Kemudian coat
akhirnya akan memiliki 2 opsi color
&size
. sun glasses
:color
&shape
. Saat Anda melihat women fashion
, hanya ada 1 pilihan color
. Ini memfilter subkategori juga karena mereka mewarisi dari women fashion
.
Untuk nilai warna, ide saya hanya menggunakan warna standar Strawberry Red
sebenarnya red
, Tangerine
sebenarnya orange
. Anda tidak benar-benar ingin mereka muncul saat Anda memfilter produk. Jika tidak, akan ada terlalu banyak pilihan, jelas tidak baik untuk pengalaman pengguna.
Namun, selain color
opsi dari kategori, situs saya juga memiliki sesuatu yang disebut customizable options
. Pilihan ini hanya ditentukan pada produk. Mereka tidak pernah muncul saat Anda melihat kategori. Di sini Anda dapat memiliki Strawberry Red
&Tangerine
. Menurut pendapat saya, ini bukan sifat 'alami' suatu produk. Mereka hanya digunakan untuk membuat pengguna merasa lebih nyaman saat melihat produk. Dengan demikian Anda juga dapat memiliki opsi semacam ini seperti Tangerine with figure
dll.
Satu hal lagi tentang opsi. Anda mungkin ingin menandai opsi mana yang seharusnya digunakan untuk memfilter produk. Misalnya color
pasti satu. Sedangkan dimension
mungkin tidak.
Tentang jenis opsi. Milikmu baik-baik saja jika itu cukup untukmu. Saya memiliki lebih banyak jenis seperti Number
, String
, Single Choice
, Multiple Choices
. Saya juga berencana untuk mengimplementasikan Unit
. Bagian rumit dari Unit
apakah itu contohnya
1GB = 1024MB = 1024*1024B
Jadi ketika Anda mendapatkan hard disk 1GB dan 1TB, Anda mungkin ingin melakukan konversi sebelum memfilter produk. Ini di luar topik. Saya akan menjawab pertanyaan Anda.
Perhatikan bahwa meskipun opsi kategori yang berbeda memiliki nama yang sama. Mereka tidak mungkin hal yang sama. Material
dari Coat
dan Furniture
adalah 2 hal yang berbeda. Jadi saya cenderung mendefinisikan opsi yang berbeda untuk kategori yang berbeda. Jadi mungkin ada color
untuk toys
, dan color
untuk women fashion
. Ini tidak bertentangan dengan pewarisan yang disebutkan di atas karena dari tingkat tertentu, subkategori mulai berbagi opsi yang sama. Ini sepenuhnya terkait dengan bagaimana Anda mengatur struktur kategori Anda. Dan jika Anda ingin mengubah struktur kategori atau memindahkan produk suatu saat, itu akan menyakitkan. Jadi berhati-hatilah saat menentukan kategori Anda.
Itu saja yang muncul di pikiran saya. Saya khawatir saya bukan penutur asli bahasa Inggris sehingga Anda mungkin menemukan beberapa bagian dari jawaban saya sulit dimengerti. Jangan ragu untuk memberi tahu saya.