5
respostas

Associação de ID entre coleções

Boa tarde, pessoal! Bom espero que respondem rápido pois parece que o fórum esta esquecido para esse curso.

Bom eu tenho 3 tabelas (coleções) coleção PESSOA coleção Estacionamento Pessoa coleção Estacionamento Empresarial

No mongo DB como eu relaciono essas tabelas ex: Pessoa vai se relacionar com Estacionamento pessoa e Estacionamento pessoa com Estacionamento Empresarial

5 respostas

Você está pensando no modelo relacional, no mongo você pode trabalhar com o modelo de dados incorporado, seu aplicativo pode recuperar as informações completas do usuário com uma consulta:

{ 
   _id :  "rafael" , 
   nome :  "Rafael Lacerda" , 
   estacionamento :  [ 
                { 
                  street :  "123 Fake Street" , 
                  cidade :  "Faketon" , 
                  estado :  "MA" , 
                  zip :  "12345" 
                }, 
                { 
                  street :  "1 Some Other Street " , 
                  cidade :  " Boston " , 
                  estado :  " MA " , 
                  CEP :  " 12345 " 
                } 
              ] 
              ...
 }

Ou você vai ter que ter uma mesma chave para identificar (modelo normalizado):

{ 
   _id :  "joe" , 
   nome :  "Joe Bookreader" 
}

{ 
   patron_id :  "joe" , 
   rua :  "123 Fake Street" , 
   cidade :  "Faketon" , 
   estado :  "MA" , 
   CEP :  "12345" 
}

{ 
   patron_id :  "joe" , 
   rua :  "1 Some Other Street" , 
   cidade :  "Boston" , 
   estado :  "MA" , 
   CEP :  "12345" 
}

Não existe uma PK ou FK como nos bancos de dados relacionais, porém você pode criar um relacionamento lógico entre os documentos.

Eu não entendi nada, sua resposta foi muito vaga e demorada para responder, pode ser mais especifico? Tipo crie uma tabela A e uma tabela B e associa as duas para eu ver como seria, isso sim seria uma reposta valida, aguado algo mais concreto, Eu estou usando o Mongo DB compass

Oi Rafael, tudo bem? Então, o Mongo em si, até onde sei, não tem um mecanismo de foreign key, que força esse tipo de relacionamento como nos bancos relacionais.

O que acaba acontecendo com alguma frequência é a inclusão de documentos um dentro do outro.

Então, se você tem essas três coleções, algo que pode acontecer é: dentro de estacionamento_pessoa, você ter uma lista de pessoas e dentro de estacionamento_empresarial, você ter a lista de empresas e para cada empresa, a lista de pessoas.

Eu não sei se entendi bem o que você quer fazer, mas caso eu tenha entendido errado, me explica novamente por favor?

Outra alternativa é você ter várias coleções e ficar buscando e inserindo ids manualmente.

Eu vi que no mongo compass tem uma opção de lookup, será que daria certo?

Rafael, o lookup é uma função de agregação. É basicamente um Left Join. Documentação: https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/

Existe também um exemplo na documentação sobre como fazer referências entre documentos de forma manual, primeiro você usa a função objectId(), que vai te gerar um ID válido, ai você usa esse ai gerado como chave primária de um documento e depois o mesmo id como chave estrangeira em outro documento... ex: https://docs.mongodb.com/manual/reference/database-references/#manual-references

Algo que também pode ajudar a entender a modelagem de dados é a página quue fala sobre isso na própria documentação: https://docs.mongodb.com/manual/core/data-modeling-introduction/

Está tudo em inglês, mas se precisar de ajuda com isso, posso tentar fazer algo...