MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Salvataggio, organizzazione e interrogazione di prodotti, opzioni/tag e categorie

Gestisco anche un sito di e-commerce. Ecco il mio consiglio su come implementare le funzionalità che hai menzionato. Spero che aiuti.

  • Categorie

Li organizzo in una struttura piana, nel tuo caso sarebbe:

    {_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/", ...}

E il prodotto ora deve essere solo nelle categorie foglia. Nel tuo caso:

    {
        _id: asdasfwetrw34tw34t245y45y,
        name: "NVIDIA GTX670",
        price: 99.50,
        ...
        ...
        categoryIds: [3]
    }

Il prodotto può essere ovviamente in più categorie, quindi categoryIds rimane un array. Ecco la parte difficile. Quando elenchi Electronics categoria, puoi trovare tutte le sue sottocategorie per:

    db.categories.find({idPath: /^\/0\/1/})

idPath index funziona qui, quindi sarà veloce. quando scopri tutte le sottocategorie, puoi facilmente trovare tutti i prodotti in esse contenuti (crea l'indice su categoryIds di Product raccolta).

O in alternativa, puoi leggere tutte le categorie in memoria e costruire una tabella hash con la chiave->categoriaId, valore->[tutte le sottocategorie]. Le tue categorie di solito non cambieranno frequentemente e non avrai molte categorie. Quindi andrà tutto bene.

  • Tag/Opzioni

Prima di tutto penso che ci sia qualcosa che non va nella tua categoria. Women fashion è qualcosa di generico, dovresti inserire il tuo prodotto in qualcosa di più specifico e anche le opzioni dovrebbero essere lì. Ad esempio, potrebbe esserci una categoria coat che ha la size &color , diverso da women fashion . Anche se potrebbe esserci ancora color opzione in women fashion perché è una caratteristica comune a tutte le sottocategorie.
Se ci pensi, perché tutte le sottocategorie sono organizzate in una categoria principale? perché hanno qualcosa in comune. Quella parte comune dovrebbe essere le opzioni comuni della categoria genitore. vale a dire, dovrebbe esserci un'eredità tra tutte le categorie e le sottocategorie padre. Ad esempio:

Quindi coat avrebbe finalmente 2 opzioni color &size . sun glasses :color &shape . Durante la visualizzazione di women fashion , c'è solo 1 opzione color . Filtra anche le sottocategorie perché ereditano da women fashion .
Per quanto riguarda i valori del colore, la mia idea è di utilizzare solo i colori standard Strawberry Red è in realtà red , Tangerine in realtà è orange . Non vuoi davvero che appaiano quando filtri i prodotti. Altrimenti ci sarebbero troppe opzioni, decisamente non buone per l'esperienza dell'utente.
Tuttavia, oltre a color opzione dalla categoria, il mio sito ha anche qualcosa chiamato customizable options . Queste opzioni sono definite solo sui prodotti. Non compaiono mai quando visualizzi la categoria. Qui puoi avere Strawberry Red &Tangerine . A mio parere, queste non sono proprietà "naturali" di un prodotto. Sono utilizzati solo per far sentire l'utente più a suo agio durante la visualizzazione del prodotto. Quindi puoi anche avere opzioni di questo tipo come Tangerine with figure ecc.
Un'altra cosa sulle opzioni. potresti voler contrassegnare quali opzioni dovrebbero essere utilizzate per filtrare i prodotti. Ad esempio color è sicuramente uno. Mentre size potrebbe non esserlo.

Informazioni sui tipi di opzioni. I tuoi vanno bene se ti basta. Ho molti più tipi come Number , String , Single Choice , Multiple Choices . Ho anche intenzione di implementare l'Unit . Parte difficile di Unit è quello per esempio

1GB = 1024MB = 1024*1024B

Quindi, quando ottieni un disco rigido da 1 GB e 1 TB, potresti voler eseguire una conversione prima di filtrare i prodotti. Questo è fuori tema, tornerò alla tua domanda.

Si noti che sebbene le opzioni di diverse categorie abbiano lo stesso nome. Probabilmente non sono la stessa cosa. Material di Coat e Furniture sono 2 cose diverse Quindi tendo a definire opzioni diverse per categorie diverse. Quindi forse c'è color per toys e color per women fashion . Ciò non è in conflitto con l'eredità sopra menzionata perché da un certo livello le sottocategorie iniziano a condividere le stesse opzioni. Questo è completamente correlato al modo in cui organizzi la struttura della tua categoria. E se vuoi cambiare la struttura delle categorie o spostare i prodotti un po' di tempo, sarebbe doloroso. Quindi fai attenzione quando definisci le tue categorie.

Questo è tutto ciò che mi viene in mente. Temo di non essere madrelingua inglese, quindi potresti trovare una parte della mia risposta difficile da capire. Sentiti libero di farmelo sapere.