También tengo un sitio web de comercio electrónico. Este es mi consejo sobre cómo implementar las funciones que mencionaste. Espero que ayude.
- Categorías
Los organizo en una estructura plana, en tu caso sería:
{_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/", ...}
Y el producto ahora debe estar solo en las categorías de hoja. En su caso:
{
_id: asdasfwetrw34tw34t245y45y,
name: "NVIDIA GTX670",
price: 99.50,
...
...
categoryIds: [3]
}
El producto puede estar en varias categorías, por supuesto, por lo que los categoryIds
sigue siendo una matriz. Aquí está la parte difícil. Cuando enumeras los Electronics
categoría, puedes encontrar todas sus subcategorías por:
db.categories.find({idPath: /^\/0\/1/})
idPath
index funciona aquí, así que va a ser rápido. cuando encuentre todas las subcategorías, puede encontrar fácilmente todos los productos en ellas (construya un índice en categoryIds
) de Product
colección).
O alternativamente, puede leer todas las categorías en la memoria y crear una tabla hash con la clave->categoryId, valor->[todas las subcategorías]. Por lo general, sus categorías no cambiarán con frecuencia y no tendrá muchas categorías. Por lo tanto, va a estar bien.
- Etiquetas/Opciones
En primer lugar, creo que hay algo mal con su categoría. Women fashion
es algo genérico, debe poner su producto en algo más específico, y las opciones también deben estar ahí. Por ejemplo, puede haber una categoría coat
que tiene el size
&color
, excepto women fashion
. Si bien aún puede haber color
opción en women fashion
porque es una característica común de todas las subcategorías.
Si lo piensa, ¿por qué todas las subcategorías están organizadas en una categoría principal? porque tienen algo en común. Esa parte común deberían ser las opciones comunes de la categoría principal. es decir, debe existir una herencia entre toda la categoría padre y subcategorías. Por ejemplo:
Luego coat
finalmente tendría 2 opciones color
&size
. sun glasses
:color
&shape
. Cuando estás viendo women fashion
, solo hay 1 opción color
. También filtra las subcategorías porque heredan de women fashion
.
En cuanto a los valores de color, mi idea es utilizar únicamente los colores estándar Strawberry Red
en realidad es red
, Tangerine
en realidad es orange
. Realmente no desea que aparezcan cuando filtre los productos. De lo contrario, habría demasiadas opciones, definitivamente no son buenas para la experiencia del usuario.
Sin embargo, además de color
opción de la categoría, mi sitio también tiene algo llamado customizable options
. Estas opciones solo están definidas en los productos. Nunca aparecen cuando ves la categoría. Aquí puedes tener Strawberry Red
&Tangerine
. En mi opinión, estas no son propiedades 'naturales' de un producto. Solo se utilizan para que el usuario se sienta más cómodo al visualizar el producto. Así también puedes tener opciones de este tipo como Tangerine with figure
etc.
Una cosa más sobre las opciones. es posible que desee marcar qué opciones se supone que deben usarse para filtrar productos. Por ejemplo color
definitivamente es uno. Mientras dimension
puede que no.
Sobre los tipos de opciones. Los tuyos están bien si es suficiente para ti. Tengo muchos más tipos como Number
, String
, Single Choice
, Multiple Choices
. También planeo implementar la Unit
. Parte complicada de Unit
es que por ejemplo
1GB = 1024MB = 1024*1024B
Entonces, cuando obtenga un disco duro de 1 GB y 1 TB, es posible que desee realizar una conversión antes de filtrar productos. Esto está fuera del tema. Volveré a tu pregunta.
Tenga en cuenta que aunque las opciones de diferentes categorías tienen el mismo nombre. No es probable que sean lo mismo. Material
de Coat
y Furniture
son 2 cosas diferentes. Así que tiendo a definir diferentes opciones para diferentes categorías. Por lo tanto, tal vez color
para toys
y color
para women fashion
. Esto no entra en conflicto con la herencia mencionada anteriormente porque a partir de algún nivel, las subcategorías comienzan a compartir las mismas opciones. Esto está completamente relacionado con la forma en que organiza su estructura de categorías. Y si desea cambiar la estructura de categorías o mover productos en algún momento, sería doloroso. Así que tenga cuidado cuando defina sus categorías.
Eso es todo lo que me viene a la mente. Me temo que no soy un hablante nativo de inglés, por lo que es posible que encuentre una parte de mi respuesta difícil de entender. No dudes en hacérmelo saber.