relational - hicham-sahla/team-tech-2 Wiki

MongoDB Relational

Wat is de topic?

Je hebt SQL en No-SQL. SQL data hebben relaties met elkaar. Zo heb je een relatie database. Dan heb je bijvoorbeeld een collection met users en series en als een user een serie heeft geliket dan moet die serie bij zijn profiel komen te staan. Dan heb je nog een collection met likes waarbij je de id van de user en de is van de serie bij elkaar doet.

No-SQL is niet relationale databases. MongoDB is een niet relationale database. Met Mongo zijn er 2 collections. De Series en de Users. Wanneer de gebruiker een serie liket, gaat de id van de serie in de like array van de user.

Er zijn 2 manieren om relaties met collections toe te staan. Embedded relationship of referenced relationship.

Embedded

Een collection wordt gebruikt als een sub collection die wordt gestopt in een andere collection. Het is een techniek om gerelateerde gegevens op te slaan in een enkele collection structuur. Het kan worden opgeslagen als een array of een JSON object.

embedded

Referenced

Hierbij wordt een id van een collection in een andere collection gezet door middel van een array, dat vormt de relatie. Referencing slaat de relatie tussen de gegevens op door links op te nemen. Dus de id.

referenced

Wat hebben wij gekozen?

Bij onze applicatie hebben wij 2 collections. Users en Series. Daarbij hadden wij gekozen om referenced relations te gaan gebruiken omdat het voor onze case een makkelijke en efficiënte manier is (MongoDB Manual). Voor in de toekomst willen wij ook een profile pagina waarbij de user de gelikte series kan zien. Daar mee wordt er op meerdere locaties van de applicatie gevraagd naar de data. Uit onderzoek blijkt dat reference daar het meest geschikts voor is.

Nadat we hadden besloten om de reference manier te doen, gingen we kijken hoe we de data dan zouden opslaan. We konden kiezen om een array te maken bij de series waarbij de user id’s worden opgeslagen. Of dat we een array doen bij de user waarbij de id’s van de series bij de users worden opgeslagen.

We kozen ervoor om de id’s van de serie toe te voegen bij de user. Dus dan bij de collection user heeft een user een keyfield genaamd like waarbij daar achter een lege array staat waar de id’s in worden opgeslagen. Dit leek ons een logische manier omdat je dan een simpel overzicht hebt van de user met zijn gelikte series. Wat er net al werd gezegd, willen wij een profiel pagina maken. Als de id’s van de series opgeslagen zijn in de collection van de user, kan je die data makkelijk ophalen. Met dat in ons achterhoofd, kozen wij dus ervoor om serie id’s op te slaan bij de user en juist niet andersom.

users

series

De code

Voor meer informatie over de code van dit informatie, zie like.

    <% if(user.likes.includes(serie._id)) { %> 
    <form action="/dislike/<%= user._id %>" method="post">
    <button type="submit">
        <span class="heart-default heart-added"></span>
    </button>
    <input type="hidden" name="serieId" value="<%= serie._id %>" />
    </form>
    <% } else { %>
    <form action="/like/<%= user._id %>" method="post">
        <button type="submit">
        <span class="heart-default "></span>
        </button>
        <input type="hidden" name="serieId" value="<%= serie._id %>" />
    </form>
    <% } %>

In de index.ejs hebben we een if else met de like button. Met de if else zorg je ervoor dat je de serie ook kan disliken (verwijderen uit je lijstje) waarbij de gelikte buttons paars zijn en de nog niet of de verwijderde series wit zijn. Als je een serie heb gedisliket, kan je hem simpel weer liken.

Wanneer je op het hartje klikt om te liken pakt hij in de input value de serie id en zet hij die in de like array van de user. Zie meer info.

Bronnen

  1. https://www.youtube.com/watch?v=TVZznmBpBUs&ab_channel=TutorialsPoint%28India%29Ltd.
  2. https://www.youtube.com/watch?v=4ZxJ6pN_b4o&ab_channel=TutorialsPoint%28India%29Ltd.
  3. https://www.knowledgehut.com/blog/web-development/data-relationships-in-mongodb
  4. https://medium.com/@dis_is_patrick/mongodb-relations-26201385b919#:~:text=Embedding%20vs%20Referencing&text=Will%20your%20data%20be%20referred,is%20the%20way%20to%20go.
  5. https://medium.com/@dis_is_patrick/mongodb-relations-26201385b919
  6. https://www.mongodb.com/docs/manual/reference/database-references/#:~:text=MongoDB%20applications%20use%20one%20of,sufficient%20for%20most%20use%20cases.
⚠️ **GitHub.com Fallback** ⚠️