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

MongoDB/JS - Búsqueda avanzada por facetas - Cómo obtener solo categorías/valores relevantes

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"