Giter VIP home page Giter VIP logo

poc-order-system's Introduction

Nesse post abordarei uma modelagem um pouco mais complexa que de um sistema de blogs, será a de um catálogo de produtos, uma ideia inicial para a criação de um ecommerce.

Nosso sistema precisa ter a capacidade de armazenar vários tipos diferentes de objetos e seu relecaionamentos, isso pode implicar em vários problemas na modelagem quando se está pensando no modelo relacional ainda.

http://nomadev.com.br/![](http://nomadev.com.br/content/images/2014/Sep/Screen_Shot_2014_09_30_at_9_19_03_AM.png)

Nessa modelagem temos o produto que possui categoria e tags, o pedido que é ligado a produtos e usuários. E nosso usuário possui endereço com cidade, estado e país.

Bom você percebeu como conseguimos separar em 3 contextos diferentes nosso sistema?

  • produto
  • pedido
  • usuário

Partindo dessa informação podemos iniciar a modelagem da agregação no MongoDb, utilizando exatamente esses 3 contextos como objetos agregadores dos dados, não entendi porra nenhuma!

Ok, então vamos ao código que ficará mais fácil.

##Produto

Nesse agregado juntamos as informações do produto com categoria e tags.

##Pedido

No agregado do pedido ligamos os produtos e o usuário.

##Usuário Para o usuário nós agregamos o endereço, cidade, estado e país.

##Conclusão

Percebeu como em vez de separarmos os dados agora nós os agregamos? É dessa forma que temos que trabalhar com o MongoDb, isso contribui muito para nossas buscas já que o MongoDb não possui JOINS e o forte dele é sua velocidade na busca, quanto mais dados agregados serem entregues em uma única query mais performático seu sistema será.

Bah mas então se que quiser buscar os pedidos eu ainda terei que ter uma query para buscar o usuário e outra para os produtos?

Exatamente!

Mas calma essa modelagem ainda não está ótima, vamos refatorar ela levando em mente que a função principal do nosso sistema de gerenciamento é a listagem dos pedidos feitos pelo usuário, nesse caso vamos agregar o pedido na coleção de usuário ficando assim:

Mas por que isso tio Suissa?

Para que nossa busca principal, que é a listagem dos pedidos do usuário, seja feita da maneira mais rápida possível apenas com duas consultas: usuário e produtos. Pois a listagem dos pedidos já está agregada no usuário não necessitando fazer uma consulta apenas para isso.

##API

###Inserindo produto

##Inserindo usuário

##Adicionando Produto ao Pedido

API Route Controller

Para inserir um produto nós na verdade precisamos alterar nosso usuário e atualizar o array de pedidos adicionando o objeto do nosso produto, por isso usamoso seguinte objeto modificador com a função de update:

var mod = {$push: {"orders.products": product}};

Model.update(query, mod, function(err, data) {
  cb(err, data, res);
});

poc-order-system's People

Contributors

suissa avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

poc-order-system's Issues

Erro Add product

Estou tendo esse erro ao adicionar o produto.
"Erro: MongoError: cannot use the part (orders of orders.products) to traverse the element ({orders: []})"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.