MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Menyimpan, mengatur, dan menanyakan produk, opsi/tag, dan kategori

Saya juga menjalankan situs web e-niaga. Inilah saran saya tentang bagaimana saya menerapkan fitur yang Anda sebutkan. Semoga membantu.

  • Kategori

Saya mengaturnya dalam struktur datar, dalam kasus Anda akan menjadi:

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

Dan produk sekarang hanya perlu dalam kategori daun. Dalam kasus Anda:

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

Produk bisa dalam beberapa kategori tentunya, jadi categoryIds tetap sebuah array. Inilah bagian yang sulit. Saat Anda mencantumkan Electronics kategori, Anda dapat menemukan semua subkategorinya dengan:

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

idPath index berfungsi di sini sehingga akan cepat. ketika Anda menemukan semua sub-kategori, Anda dapat dengan mudah menemukan semua produk di dalamnya (membangun indeks pada categoryIds dari Product koleksi).

Atau sebagai alternatif, Anda dapat membaca semua kategori ke dalam memori dan membuat tabel hash dengan kunci->categoryId, nilai->[semua subkategori]. Kategori Anda biasanya tidak akan sering berubah dan Anda tidak akan memiliki banyak kategori. Jadi semuanya akan baik-baik saja.

  • Tag/Opsi

Pertama-tama saya pikir ada yang salah dengan kategori Anda. Women fashion adalah sesuatu yang generik, Anda harus memasukkan produk Anda ke dalam sesuatu yang lebih spesifik, dan pilihannya juga harus ada di sana. Misalnya, mungkin ada kategori coat yang memiliki size &color , selain women fashion . Mumpung masih ada color pilihan dalam women fashion karena itu adalah karakteristik umum dari semua subkategori.
Jika dipikir-pikir, mengapa semua subkategori diatur dalam satu kategori induk? karena mereka memiliki kesamaan. Bagian umum itu harus menjadi opsi umum dari kategori induk. artinya, harus ada warisan antara semua kategori induk dan subkategori. Misalnya:

Kemudian coat akhirnya akan memiliki 2 opsi color &size . sun glasses :color &shape . Saat Anda melihat women fashion , hanya ada 1 pilihan color . Ini memfilter subkategori juga karena mereka mewarisi dari women fashion .
Untuk nilai warna, ide saya hanya menggunakan warna standar Strawberry Red sebenarnya red , Tangerine sebenarnya orange . Anda tidak benar-benar ingin mereka muncul saat Anda memfilter produk. Jika tidak, akan ada terlalu banyak pilihan, jelas tidak baik untuk pengalaman pengguna.
Namun, selain color opsi dari kategori, situs saya juga memiliki sesuatu yang disebut customizable options . Pilihan ini hanya ditentukan pada produk. Mereka tidak pernah muncul saat Anda melihat kategori. Di sini Anda dapat memiliki Strawberry Red &Tangerine . Menurut pendapat saya, ini bukan sifat 'alami' suatu produk. Mereka hanya digunakan untuk membuat pengguna merasa lebih nyaman saat melihat produk. Dengan demikian Anda juga dapat memiliki opsi semacam ini seperti Tangerine with figure dll.
Satu hal lagi tentang opsi. Anda mungkin ingin menandai opsi mana yang seharusnya digunakan untuk memfilter produk. Misalnya color pasti satu. Sedangkan dimension mungkin tidak.

Tentang jenis opsi. Milikmu baik-baik saja jika itu cukup untukmu. Saya memiliki lebih banyak jenis seperti Number , String , Single Choice , Multiple Choices . Saya juga berencana untuk mengimplementasikan Unit . Bagian rumit dari Unit apakah itu contohnya

1GB = 1024MB = 1024*1024B

Jadi ketika Anda mendapatkan hard disk 1GB dan 1TB, Anda mungkin ingin melakukan konversi sebelum memfilter produk. Ini di luar topik. Saya akan menjawab pertanyaan Anda.

Perhatikan bahwa meskipun opsi kategori yang berbeda memiliki nama yang sama. Mereka tidak mungkin hal yang sama. Material dari Coat dan Furniture adalah 2 hal yang berbeda. Jadi saya cenderung mendefinisikan opsi yang berbeda untuk kategori yang berbeda. Jadi mungkin ada color untuk toys , dan color untuk women fashion . Ini tidak bertentangan dengan pewarisan yang disebutkan di atas karena dari tingkat tertentu, subkategori mulai berbagi opsi yang sama. Ini sepenuhnya terkait dengan bagaimana Anda mengatur struktur kategori Anda. Dan jika Anda ingin mengubah struktur kategori atau memindahkan produk suatu saat, itu akan menyakitkan. Jadi berhati-hatilah saat menentukan kategori Anda.

Itu saja yang muncul di pikiran saya. Saya khawatir saya bukan penutur asli bahasa Inggris sehingga Anda mungkin menemukan beberapa bagian dari jawaban saya sulit dimengerti. Jangan ragu untuk memberi tahu saya.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pangkas tanda kutip ganda di json yang diterima dari mongoDB

  2. Rata-rata bergerak dengan kerangka agregasi MongoDB?

  3. MongoDB pada otentikasi mLab gagal

  4. NodeJS Mongo - Mongoose - Nama koleksi dinamis

  5. Bagaimana cara mengonversi JSON bersarang sewenang-wenang ke CSV dengan jq – sehingga Anda dapat mengonversinya kembali?