À la base, vous pouvez créer les 2 catégories comme suit
Category
- _id
- category
Products
_ _id (the product _id )
- category (use the _id from Category)
- subcategory (use string, or if you want, create a subcategory collection)
- name
- attributes (color, model)
Quand tu veux trouver toutes les catégories
db.category.find()
Lorsque vous avez besoin de trouver tous les produits d'une catégorie, utilisez le Category _id
db.products.find({ cateogry: _id})
Lorsque vous avez besoin de trouver tous les produits d'une catégorie ET d'une sous-catégorie
db.products.find({ category: _id, subcategory: 'salon' }) //or subcategory_id
Lorsque vous avez besoin de trouver un seul produit
db.products.findOne({ _id }) //with the product_id
Lorsque vous souhaitez rechercher un produit par son nom
db.products.find({ name: { $regex : 'some search term', $option: 'i' } }) // where search term can be part of the product name
Lorsque vous voulez trouver toutes les catégories qui contiennent BMW
db.products.aggregate([
{
$match: { "attributes.model": "BMW"
},
{
$group: { _id: "$category" }
}
])
Une fois que vous avez commencé à créer la base de données, vous passez à la création des vues pour votre base de données avec agrégation, ainsi que javascript. (que vous pouvez créer une question stackoverflow séparée)
La structure de données ci-dessus et les exemples de requêtes devraient être suffisants pour gérer votre "filtrage avancé"