MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB/JS - Pesquisa avançada facetada - Como obter apenas categorias/valores relevantes


No básico, você pode criar as 2 categorias da seguinte forma
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)

Quando você quiser encontrar todas as categorias
db.category.find()

Quando você precisar encontrar todos os produtos em uma categoria, use o Category _id
db.products.find({ cateogry: _id})

Quando você precisa encontrar todos os produtos em uma categoria E subcategoria
db.products.find({ category: _id, subcategory: 'salon' }) //or subcategory_id

Quando você precisa encontrar um único produto
db.products.findOne({ _id }) //with the product_id

Quando você deseja encontrar um produto pelo nome
db.products.find({ name: { $regex : 'some search term', $option: 'i' } }) // where search term can be part of the product name

Quando você deseja encontrar todas as categorias que contém BMW
db.products.aggregate([
    {
       $match: { "attributes.model": "BMW"
     },
     {
        $group: { _id: "$category" }
      }
])

Depois de começar a criar o banco de dados, você passa a criar as visualizações para seu banco de dados com agregação, bem como javascript. (que você pode criar uma pergunta stackoverflow separada)

A estrutura de dados acima e as consultas de exemplo devem ser suficientes para lidar com sua "filtragem avançada"