MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Lưu, sắp xếp và truy vấn các sản phẩm, tùy chọn / thẻ và danh mục

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 coatsize &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 CoatFurniture 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 toyscolor 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.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Google Cloud Mongo DB:IP bên ngoài không kết nối

  2. apollostack / graphql-server - cách lấy các trường được yêu cầu trong truy vấn từ trình giải quyết

  3. MongodDB $ chỉ kéo một phần tử từ mảng

  4. Đọc tệp BSON bằng Python?

  5. Sharding MongoDB, nó sẽ cân bằng lại như thế nào khi thêm các nút mới?