sql >> Base de Datos >  >> NoSQL >> MongoDB

Guardar, organizar y consultar productos, opciones/etiquetas y categorías

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.