Tôi cũng đang điều hành một trang web thương mại điện tử. Đây là lời khuyên của tôi về cách tôi triển khai các tính năng mà bạn đã đề cập. Hy vọng nó sẽ hữu ích.
- Danh mục
Tôi sắp xếp chúng theo một cấu trúc phẳng, trong trường hợp của bạn, nó sẽ là:
{_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/", ...}
Và sản phẩm bây giờ chỉ cần ở các loại lá. Trong trường hợp của bạn:
{
_id: asdasfwetrw34tw34t245y45y,
name: "NVIDIA GTX670",
price: 99.50,
...
...
categoryIds: [3]
}
Tất nhiên, sản phẩm có thể thuộc nhiều danh mục, vì vậy categoryIds
vẫn là một mảng. Đây là phần phức tạp. Khi bạn liệt kê Electronics
danh mục, bạn có thể tìm thấy tất cả các danh mục phụ của nó bằng cách:
db.categories.find({idPath: /^\/0\/1/})
idPath
chỉ mục hoạt động ở đây vì vậy nó sẽ nhanh chóng. khi bạn tìm hiểu tất cả các danh mục phụ, bạn có thể dễ dàng tìm thấy tất cả các sản phẩm trong đó (xây dựng chỉ mục trên categoryIds
của Product
bộ sưu tập).
Hoặc cách khác, bạn có thể đọc tất cả các danh mục vào bộ nhớ và xây dựng một bảng băm với key-> categoryId, value -> [tất cả các danh mục con]. Danh mục của bạn thường không thay đổi thường xuyên và bạn sẽ không có nhiều danh mục. Vì vậy, nó sẽ ổn thôi.
- Thẻ / Tùy chọn
Trước hết, tôi nghĩ rằng có điều gì đó không ổn với danh mục của bạn. Women fashion
là một cái gì đó chung chung, bạn nên đưa sản phẩm của mình vào một cái gì đó cụ thể hơn và các tùy chọn cũng nên có. Ví dụ:có thể có một danh mục coat
có size
&color
, ngoài women fashion
. Mặc dù vẫn có thể có color
tùy chọn trong women fashion
bởi vì đó là đặc điểm chung của tất cả các danh mục con.
Nếu bạn nghĩ về điều đó, tại sao tất cả các danh mục con đều được tổ chức trong một danh mục mẹ? bởi vì họ có điểm chung. Phần chung đó phải là các tùy chọn chung của danh mục mẹ. có nghĩa là, cần có sự kế thừa giữa tất cả các danh mục mẹ và các danh mục con. Ví dụ:
Sau đó, coat
cuối cùng sẽ có 2 tùy chọn color
&size
. sun glasses
:color
&shape
. Khi bạn đang xem women fashion
, chỉ có 1 tùy chọn color
. Nó cũng lọc các danh mục phụ vì chúng kế thừa từ women fashion
.
Đối với các giá trị của màu sắc, ý tưởng của tôi là chỉ sử dụng các màu tiêu chuẩn Strawberry Red
thực sự là red
, Tangerine
thực sự là orange
. Bạn không thực sự muốn chúng xuất hiện khi bạn lọc các sản phẩm. Nếu không sẽ có quá nhiều tùy chọn, chắc chắn không tốt cho trải nghiệm người dùng.
Tuy nhiên, bên cạnh color
tùy chọn từ danh mục, trang web của tôi cũng có một cái gì đó được gọi là customizable options
. Các tùy chọn này chỉ được xác định trên các sản phẩm. Chúng không bao giờ xuất hiện khi bạn xem danh mục. Ở đây bạn có thể có Strawberry Red
&Tangerine
. Theo tôi, đây không phải là những đặc tính 'tự nhiên' của một sản phẩm. Chúng chỉ được sử dụng để làm cho người dùng cảm thấy thoải mái hơn khi xem sản phẩm. Do đó, bạn cũng có thể có tùy chọn loại này như Tangerine with figure
vv
Một điều nữa về các tùy chọn. bạn có thể muốn đánh dấu tùy chọn nào được cho là được sử dụng để lọc sản phẩm. Ví dụ:color
chắc chắn là một. Trong khi dimension
có thể không.
Về các loại quyền chọn. Của bạn là ổn nếu nó đủ cho bạn. Tôi có rất nhiều loại khác như Number
, String
, Single Choice
, Multiple Choices
. Tôi cũng dự định triển khai Unit
. Phần khó hiểu của Unit
đó là ví dụ
1GB = 1024MB = 1024*1024B
Vì vậy, khi bạn nhận được đĩa cứng 1GB và 1TB, bạn có thể muốn thực hiện chuyển đổi trước khi lọc sản phẩm. Đây là chủ đề tôi sẽ quay lại câu hỏi của bạn.
Lưu ý rằng mặc dù các tùy chọn của các danh mục khác nhau có cùng tên. Chúng không có khả năng giống nhau. Material
của Coat
và Furniture
là 2 thứ khác nhau. Vì vậy, tôi có xu hướng xác định các tùy chọn khác nhau cho các danh mục khác nhau. Do đó có thể có color
cho toys
và color
cho women fashion
. Điều này không mâu thuẫn với sự kế thừa được đề cập ở trên vì từ một số cấp độ, các danh mục con bắt đầu chia sẻ các tùy chọn giống nhau. Điều này hoàn toàn liên quan đến cách bạn tổ chức cấu trúc danh mục của mình. Và nếu bạn muốn thay đổi cấu trúc danh mục hoặc di chuyển sản phẩm một lúc nào đó, điều đó sẽ rất khó khăn. Vì vậy, hãy cẩn thận khi bạn xác định danh mục của mình.
Đó là tất cả những gì hiện lên trong đầu tôi. Tôi e rằng tôi không phải là người nói tiếng Anh bản ngữ, vì vậy bạn có thể thấy phần nào đó trong câu trả lời của tôi khó hiểu. Vui lòng cho tôi biết.