‫Sprecher: In diesem
‫Video verwenden wir einen einfachen Trick, um zu
‫verhindern, dass Benutzer mehrere Bewertungen für dieselben Touren schreiben,
‫also im Grunde doppelte Bewertungen vermeiden.
‫Im letzten Video haben wir also all diese Bewertungen
‫erstellt, um die Durchschnittswerte zu berechnen.
‫Und wir haben mehrere Bewertungen für eine Tour
‫erstellt, aber alle von demselben Benutzer.
‫Aber in der Praxis macht das wenig Sinn, oder?
‫In der realen Welt sollte
‫jeder Benutzer jede Tour nur einmal überprüfen.
‫Grundsätzlich kommt es also zu einer doppelten Bewertung,
‫wenn eine Bewertung mit demselben Benutzer und
‫derselben Tour-ID vorliegt.
‫Und genau das wollen wir vermeiden.
‫Und die offensichtliche Lösung
‫besteht darin, einfach einen eindeutigen Index zu verwenden, oder?
‫Es reicht jedoch nicht aus,
‫diese beiden Felder auf eindeutig zu setzen.
‫Und eigentlich wäre das wirklich sehr
‫falsch, denn das würde bedeuten, dass jede Tour nur eine Bewertung bekommen
‫kann und jeder Benutzer nur eine Bewertung schreiben kann.
‫Und das wollen wir natürlich nicht.
‫Was wir also brauchen, ist, dass beide zusammen einzigartig
‫sind, damit die Kombination von Benutzer und Tour immer einzigartig ist.
‫Das hört sich also etwas kompliziert an, aber
‫zum Glück ist das mit Indizes eigentlich ganz einfach zu erreichen.
‫Wir haben also bereits auf der Tour einen zusammengesetzten Index erstellt, und
‫jetzt machen wir dasselbe hier bei den Bewertungen.
‫Also noch einmal, gleich hier nach der Schemadefinition,
‫und wir sind natürlich immer noch im Review-Modell, oder?
‫Also überprüfe, und das ist
‫nicht richtig, also überprüfe den Schemapunktindex...
‫Tour auf eins gesetzt, und auch hier ist es nicht wirklich wichtig, ob es in
‫diesem Fall eins oder minus eins ist.
‫Und Benutzer auch auf eins gesetzt, okay.
‫Das ist also wieder ähnlich zu dem, was
‫wir zuvor gemacht haben, aber hier werden wir es auf
‫die nächste Ebene bringen und jetzt ein Objekt für Optionen hinzufügen.
‫Und die Option, die wir hier festlegen werden,
‫ist unique (typing) set
‫to true.
‫Und das ist es tatsächlich.
‫Damit wird genau das erreicht, was wir wollen.
‫Jetzt muss jede Kombination aus Tour und
‫Benutzer immer einzigartig sein.
‫Also lassen Sie uns hier
‫ein oder zwei speichern und dann testen Sie es tatsächlich.
‫Als ich das jetzt zum ersten Mal
‫getestet habe, hat es tatsächlich nicht auf Anhieb funktioniert.
‫Wirklich, es hat erst am nächsten Tag angefangen zu funktionieren,
‫und ich weiß nicht genau warum, aber wenn dir das
‫passiert, dann mach dir keine Sorgen, okay.
‫Und vielleicht passiert es sogar jetzt, während
‫ich dieses Video aufnehme.
‫Wie auch immer, im Moment sollte es keine Bewertungen zu der Tour
‫geben, an der wir arbeiteten.
‫Also nur um sicherzustellen, dass wir immer noch null
‫Bewertungen haben und auch die Bewertungen leer sind.
‫Und so lassen Sie uns jetzt
‫noch einmal eine neue Rezension zu dieser Tour erstellen.
‫Okay.
‫Dies ist also eine Bewertung, also ein Benutzer und eine Bewertung.
‫Also das sollte natürlich funktionieren, aber wenn ich das jetzt nochmal
‫schicke und sagen wir mal ich stelle es auf vier und sage
‫okay, dann sollte das nicht funktionieren dürfen, okay.
‫Denken Sie nur daran, dass es aufgrund
‫des Problems, das ich Ihnen zuvor erzählt habe, möglicherweise noch funktioniert, okay.
‫Daher wird diese Art von Index manchmal nicht sofort festgelegt.
‫Oh, aber in meinem Fall hier hat es auf Anhieb funktioniert.
‫Wir erhalten hier also diesen doppelten Schlüsselfehler für diesen Index, und
‫das ist genau der Index, den wir gerade erstellt haben.
‫Schauen wir uns das auch hier in Compass an.
‫Hier ist es also tatsächlich nicht, und
‫deshalb werde ich es genauso machen wie zuvor und
‫im Grunde wieder eine Verbindung herstellen.
‫Gehen Sie also zu den Neuheiten und verbinden Sie sich dann hier.
‫Natur...
‫Dann...
‫Natürlich sind
‫die Touren und unsere Indizes hier jetzt diese vier.
‫Und das ist dasjenige, das
‫wir gerade erstellt haben, oder eigentlich nicht (lacht), okay.
‫Aus irgendeinem Grund ist es nicht hier,
‫also habe ich es vorhin gesagt,
‫aber das macht nichts, denn es funktioniert tatsächlich in unserem Code.
‫Okay, wir konnten also keine zwei Bewertungen
‫desselben Benutzers erstellen, okay.
‫Aber wenn Sie sich jetzt als
‫jemand anderes einloggen, gut, dann werden wir diese Bewertung sicherlich veröffentlichen können.
‫Mal sehen, welchen Benutzer wir jetzt verwenden könnten.
‫Holen wir also alle Benutzer hierher, die ich
‫nicht kann, weil ich kein Admin bin (lacht), okay.
‫Also habe ich diesen
‫Teil vergessen und werde ihn einfach von Compass abrufen.
‫Manchmal ist das einfach einfacher.
‫Dies ist also eine Anleitung,
‫ein Benutzer (ruft), also verwenden wir einfach diesen Eduardo hier oder so.
‫Melden wir uns also als diese Person als dieser Benutzer an.
‫Ja, mit Erfolg, und jetzt sollte es
‫uns erlaubt sein, eine Bewertung zu erstellen, und tatsächlich ist sie hier, okay.
‫Und wenn wir
‫das jetzt aktualisieren, dann haben wir unsere beiden Bewertungen, super.
‫Testen Sie es jetzt nur noch einmal. Wenn
‫wir es also erneut senden, wird es nicht funktionieren,
‫da wir wieder einen Duplikatsfehler haben.
‫Genial.
‫Ich wollte Ihnen nur noch eine
‫Sache zeigen, und dafür melde ich mich als weitere
‫Person an, okay, damit ich dann eine weitere Bewertung erstellen kann.
‫Also werde ich dieses Mal dieser Max Smith sein.
‫Und so loggen wir uns ein.
‫(Mausklicks) Okay,
‫jetzt bin ich also offiziell Max
‫und kann diese Rezension posten.
‫Mit fünf
‫schaffe ich das, und
‫jetzt möchte ich einen Blick auf den Durchschnitt werfen.
‫Okay, im Moment ist es diese 4. 6666, was
‫natürlich nicht gut aussieht.
‫Und wir könnten dies im Frontend beheben.
‫Wenn wir diese Daten zum Beispiel von
‫der API anfordern und dann
‫anzeigen, könnten wir diese Rundung im Frontend durchführen.
‫Aber eigentlich möchte ich es gleich hier am Backend
‫machen, damit der Endanwender schon diesen endgültigen gerundeten Wert bekommt, der
‫in diesem Fall 4 wäre. 7, richtig?
‫Und dafür zeige ich euch ein kleines neues Feature in
‫Mongoose, das wir noch nicht genutzt haben.
‫Kommen wir also zu unserem Tourmodell und
‫zu diesem Durchschnitt, also
‫gleich hier.
‫Und so können wir jetzt eine Setter-Funktion verwenden.
‫(Tippen) Also setze und
‫diese Funktion wird jedes Mal ausgeführt, wenn ein
‫neuer Wert für dieses Feld gesetzt wird, okay.
‫Daher geben wir hier normalerweise eine Callback-Funktion an, die
‫den aktuellen Wert empfängt.
‫Und in diesem Fall gibt es im Grunde diesen Wert
‫zurück, jedoch gerundet.
‫Wir verwenden also Math Dot Round für den aktuellen Wert, aber das Problem
‫bei Math Dot Round besteht darin,
‫dass Werte auf ganze Zahlen gerundet werden.
‫Wenn wir zum Beispiel so etwas
‫hätten, würde es auf fünf gerundet, okay.
‫Und das ist nicht das, was wir wollen.
‫Wir wollen, dass es auf 4 gerundet wird. 7.
‫Also werden wir hier
‫einen Trick anwenden, der ziemlich üblich ist, also multiplizieren wir dies mit 10, und
‫damit würden wir 46 erhalten. 666, und
‫dann wäre diese gerundet 47.
‫Und dann teilen wir die Ergebnisse wieder durch 10, und das ist
‫dann 4. 7.
‫Alles klar, und das ist es tatsächlich.
‫Hier also wieder eine Setter-Funktion, die
‫jedes Mal ausgeführt wird, wenn ein neuer Wert
‫für das Bewertungsdurchschnittsfeld vorhanden ist.
‫Um dies zu testen, aktualisieren wir einfach diese letzte Bewertung,
‫die wir hinzugefügt haben, die eine Fünf hatte,
‫und belassen wir sie bei fünf.
‫Alles, was wir im Grunde tun wollen, ist also, die
‫Funktion, die diesen Durchschnitt erzeugt, erneut auszuführen.
‫Also wenn ich das jetzt mache und jetzt meine Tour bekomme,
‫sollten wir 4 bekommen. 7 hier als Durchschnitt.
‫Und ja, los geht's.
‫Toll, und das war es eigentlich schon für dieses Video.
‫Also haben wir diese nette Setter-Funktion erstellt,
‫und wir haben hier diesen einzigartigen zusammengesetzten Index
‫erstellt, um sicherzustellen, dass ein
‫Benutzer nicht mehrere Bewertungen für dieselbe Tour schreiben kann.