Básicamente, puede crear las 2 categorías de la siguiente manera
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)
Cuando quieras encontrar todas las categorías
db.category.find()
Cuando necesite encontrar todos los productos en una categoría, use el _id de categoría
db.products.find({ cateogry: _id})
Cuando necesite encontrar todos los productos en una categoría Y subcategoría
db.products.find({ category: _id, subcategory: 'salon' }) //or subcategory_id
Cuando necesite encontrar un solo producto
db.products.findOne({ _id }) //with the product_id
Cuando desee buscar un producto por su nombre
db.products.find({ name: { $regex : 'some search term', $option: 'i' } }) // where search term can be part of the product name
Cuando desee encontrar todas las categorías que contienen BMW
db.products.aggregate([
{
$match: { "attributes.model": "BMW"
},
{
$group: { _id: "$category" }
}
])
Una vez que haya comenzado a crear la base de datos, continúe con la creación de las vistas para su base de datos con agregación, así como con javascript. (que puede crear una pregunta de stackoverflow separada)
La estructura de datos anterior y las consultas de ejemplo deberían ser suficientes para manejar su "filtrado avanzado"