Você está na página 1de 4

SITUAÇÃO DE APRENDIZAGEM – MODELAGEM ECOMMERCE

Modelando cadastro de produtos


db.produto.insert({
     nomeProduto: "pen drive 1",
        categoria : "pen drive"
     marca: "scandisk",
     modelo: "xpto",
     capacidade: "32GB",
     preco: 32.00,
     descricao: "pen drive XPTO #muitoBoa"
});

db.produto.insert({
     nomeProduto: "tablet BOM",
     categoria: "tablet",
     marca: "B.O.M",
     modelo: "deltaK",
     polegadas: "10",
     sistemaOperacional: "android 6.0",
     preco: 789.90,
     descricao: "Esse table é o mais vendido no momento"
});

db.produto.insert([
{
     nomeProduto: "pen drive 1",
     categoria: "pen drive",
     marca: "scandisk",
     modelo: "xpto",  
     preco: 32.00,
     descricao: "pen drive XPTO #muitoBoa",
     detalhe : {capacidade: "32GB"}
},
{
     nomeProduto: "tablet BOM",
     categoria: "tablet",
     marca: "B.O.M",
     modelo: "deltaK",
     preco: 789.90,
     descricao: "Esse table é o mais vendido no momento",
     detalhe : {polegadas: "10",
               sistemaOperacional: "android 6.0"
}
]);
Utilizado esse tratamento, se desejarmos retornar apenas os detalhes de um
ou mais itens, podemos utilizar a projeção para retornar o atributo detalhe.
Um exemplo de projeção para retornar todos os detalhes seria:
db.produto.find(null,{detalhe:1});
O resultado seria semelhante às linhas a seguir, retornando o id e os sub-atributos do detalhe:
{ "_id" : ObjectId("123."), "detalhe" : { "capacidade" : "32GB" }}
{ "_id" : ObjectId("132."), "detalhe" :
{ "polegadas" : "10","sistemaOperacional" : "android 6.0" } }
Essa capacidade que o JSON tem de agrupar uma ou mais coleções de objetos auxilia na
organização das informações, permitindo que estruturas complexas sejam facilmente representadas.
Fazer uma implementação desse nível em um banco convencional é muito mais complexo.

Modelando cadastro de clientes


db.usuario.save(
{
     nome: "Fulano da Silva Sauro",
     dtNascimento: "22/08/1990",
     cpf: "125321-99",
     email: "fulanoSilva@sauro.net",
     telefone: "(48)7070-7070",
     cartoesDeCredito: [{
           nome: "PaiFulano",
           sobrenome: "Silva Sauro",
           numeroCartao: "8888 9999 7777 1111",
           dataExpiracao: {
                 mes: 08,
                 ano: 2022
           },
           codigoSeguranca: "123",
           cep: "7777777-899"
     }],
     enderecos: [{
           cep: "666666666-789",
           rua: "Rua das garças",
           numero: 878,
           complemento: ""
     }]
});

Instrução de update adicionando mais um registro no array de cartaoDeCredito.


db.usuario.update({
     nome: "Fulano da Silva Sauro"
}, {
     $addToSet: {
           cartoesDeCredito: {
                 nome: "Proprio",
                 sobrenome: "Silva Sauro",
                 numeroCartao: "9999 8888 7777 6666",
                 dataExpiracao: {
                       mes: 09,
                       ano: 2021
                 },
                 codigoSeguranca: "321",
                 cep: "7777777-899"
           }
     }
});
Esse comando irá adicionar mais um item de cartaoDeCredito para o usuário de nome “Fulano da
Silva Sauro”.
Na versão 3.2 ou superior é possível realizar “LEFT JOIN DO SQL” através do comando #lookup.
Exemplo de uso do $lookUp.
db.ColecaoDaEsquerda.aggregate(
[{
     $lookup: {
           from: "colecaoDaDireita",
           localField: "atributoDeLigacaoDaEsquerda",
           foreignField: "atributoDeLigacaoDaEsquerda",
           as: "aliasDoAtributo"
     }
}]);
Esse comando é semelhante à instrução Left Join do SQL
Select * from tabelaDaEsquerda
Left Join TabelaDaDireita on (
     TabelaDaDireita.IdDaEsquerda tabelaDaEsquerda.IdDaEsquerda
);

Instrução de aggregate lookup da coleção de usuário com o histórico


db.usuario.aggregate([{
     $lookup: {
           from: "historicoDePesquisa",
           localField: "_id",
           foreignField: "idUsuario",
           as: "pesquisas"
     }
}]);

Resultado da instrução aggregate da coleção usuário com a historico.


01 {
02     "_id": ObjectId("57634a84f172e0873dbf5d61"),
03     "nome": "Fulano da Silva Sauro",
04     "dtNascimento": "22/08/1990",
05     "cpf": "125321-99",
06     "email": "fulanoSilva@sauro.net",
07     "telefone": "(48)7070-7070",
08     "cartoesDeCredito": [{
09           "nome": "PaiFulano",
10           "sobrenome": "Silva Sauro",
11           "numeroCartao": "8888 9999 7777 1111",
12           "dataExpiracao": {
13                 "mes": 8,
14                 "ano": 2022
15           },
16           "codigoSeguranca": "123",
17           "cep": "7777777-899"
18     }, {
19           "nome": "Proprio",
20           "sobrenome": "Silva Sauro",
21           "numeroCartao": "9999 8888 7777 6666",
22           "dataExpiracao": {
23                 "mes": 9,
24                 "ano": 2021
25           },
26           "codigoSeguranca": "123",
27           "cep": "7777777-899"
28     }],
29     "enderecos": [{
30           "cep": "666666666-789",
31           "rua": "Rua das garças",
32           "numero": 878,
33           "complemento": ""
34     }],
35     "pesquisas": [{
36           "_id": ObjectId("5765cccbf172e0873dbf5d62"),
37           "idUsuario": ObjectId("57634a84f172e0873dbf5d61"),
38           "nome": "Fulano da Silva Sauro",
39           "email": "fulanoSilva@sauro.bet",
40           "idProduto": ObjectId("5760b5397d17d7ba12e61af2"),
41           "nomeProduto": "pen drive 1",
42           "categoria": "pen drive",
43           "marca": "scandisk",
44           "modelo": "xpto",
45           "preco": 32,
46           "descricao": "pen drive XPTO #muitoBoa"
47     },
48     {
49           "_id": ObjectId("5765cccbf172e0873dbf5fftd5"),
50           "idUsuario": ObjectId("57634a84f172e0873dbf5d61"),
51           "nome": "Fulano da Silva Sauro",
52           "email": "fulanoSilva@sauro.bet",
53           "idProduto": ObjectId("13760b5397d17d7ba1fd41aff"),
54           "nomeProduto": "tablet BOM",
55           "categoria": "tablet",
56           "marca": "B.O.M",
57           "modelo": "deltaK",
58           "preco": 789.90,
59           "Esse table é o mais vendido no momento"
60     }]
61 }
Observe que na linha 35 foi adicionado um novo atributo com o mesmo nome do “as” do método de
lookup do aggregate.

Você também pode gostar