Database - joeriBouwman25/CMD-Project-Tech-2021 Wiki

Database

Voor My Music Match maak ik gebruik van een database. De database die ik gebruik is mongoDB door middel van het volgende stuk code maak ik verbinding met de mongoDB database:

MongoClient.connect(url, {useUnifiedTopology: true}, (err, client) => {
  if (err){
    console.log(err)
  }
  else{
    users = client.db(process.env.DB_NAME).collection('users')
  }
})

In de database heb je verschillende clusters waarin je verschillende collections kan aanmaken, deze collection bevatten weer verschillende documenten. Zelf gebruik ik maar een collection waarin alle informatie wordt opgeslagen, dit is collection 'users'. Collection 'users' is weer opgeslagen in een cluster met de naam 'MyMusicMatch' wanneer de verbinding succesvol is gebruik ik de variabele 'users' om in de juiste collectie binnen de database te zoeken.

In de collection users worden alle gebruikers van mijn applicatie opgeslagen, gebruikers worden aan de database toegevoegd wanneer een profiel wordt aangemaakt. Elk user profiel is een object die uit de volgende onderdelen bestaat:

_id:       *ObjectID*
id:        *string*
name:      *string*
picture:   *string*
email:     *string*
age:       *string*
likes:     *array*
dislikes:  *array*
matches:   *array*
songs:     *array*
genres:    *array*

De arrays likes, dislikes en matches zijn lege arrays die gevuld worden zodra de gebruiker andere profielen liked of disliked. Wanneer de gebruiker een ander profiel liked of disliked zal het andere profiel als een object aan de like of dislike array worden toegevoegd. Als het andere profiel mijn profiel in zijn of haar like array heeft staan en ik like dat profiel ook dan zal mijn profiel aan het andere profiel's matches array worden toegevoegd en het andere profiel wordt aan mijn matches array toegevoegd.

De array songs is opgebouwd uit objects die informatie met betrekking tot je persoonlijke favoriete nummers bevatten. de objecten van songs zijn als volgt opgebouwd:

{
title:     *string*,
artist:    *string*,
albumArt:  *string*
}

De applicatie kijkt welke gebruiker momenteel ingelogd is en past daar de weergegeven data op aan zodat je niet twee keer dezelfde persoon kan tegenkomen en de favoriete nummers van jouw matches in je musiclist terecht komt.

Mongoose

Nadat mijn feature klaar was heb ik gekeken naar het opsplitsen van mijn code aan de hand van het MVC model (zie code structure voor meer info over MVC) ik heb er toen ook voor gekozen om de connectie met de database aan te passen. Ik gebruik nu de nam package mongoose om te verbinden met mongoDB. Mongoose maakt het gemakkelijker om informatie uit te wisselen met de database.

De verbinding met mongoose lijkt op de manier van verbinden zoals ik eerst deed, wat veranderd, is dat je nu werkt aan de hand van een Schema .

in server.js maak in met de volgende code verbinding met de database:

mongoose.connect(url, { useNewUrlParser: true, useUnifiedTopology: true })
  .then((result) => app.listen(port, console.log('Server running!🎉')))
  .catch((err) => console.log(err))

in mijn models heb ik Javascript bestand users.js waarin ik aangeef doormiddel van de volgende code met welke collection ik informatie uitwissel en hoe elk document in de collection is opgebouwd:

const Schema = mongoose.Schema

const userSchema = new Schema({
  id: String,
  name: String,
  age: Number,
  email: String,
  picture: String,
  likes: Array,
  dislikes: Array,
  matches: Array,
  songs: [
    { title: String, artist: String, source: String },
    { title: String, artist: String, source: String },
    { title: String, artist: String, source: String }
  ],
  genres: Array
})

const Users = mongoose.model('users', userSchema)

Zoals je ziet is dit schema hetzelfde zoals ik hier Boven al had beschreven waaruit elk document bestaat. Door te verbinden via mongoose heb ik nu een overzichtelijkere code en is het voor mij makkelijker communiceren met de database.