Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht
Ich möchte den Datenbankrequest sortieren. Zum bloßen herausnehmen, habe ich das in node.js mit der express api und dem monk framework für die mongodb so gemacht:
app.get("/getHighscore", (req, res) => {
  gotHighscore
      .find()
      .then(gotHighscore => {
        res.json(gotHighscore);
      });
});

Chromelog:

0: {_id: "5e57afae67db842ff4bf806b", score: "150", name: "Hendel", created: "2020-02-27T12:01:50.173Z"}
1: {_id: "5e57b4fb67db842ff4bf806c", score: "70", name: "123", created: "2020-02-27T12:24:27.351Z"}
2: {_id: "5e57b63667db842ff4bf806d", score: "110", name: "iseemypee", created: "2020-02-27T12:29:42...

Natürlich sollen die Highscores aber sortiert sein. Dafür habe ich folgende Methode verwendet:

app.get("/getHighscore", (req, res) => {
  gotHigscore
      .find({}, {sort : {score: -1}})
      .then(gotHighscore => {
        res.json(gotHighscore);
      });
});

Die Highscores werden aber nicht wie erwartet sortiert:

0: {_id: "5e57b4fb67db842ff4bf806c", score: "70", name: "123", created: "2020-02-27T12:24:27.351Z"}
1: {_id: "5e57afae67db842ff4bf806b", score: "150", name: "Hendel", created: "2020-02-27T12:01:50.173Z"}
2: {_id: "5e57b63667db842ff4bf806d", score: "110", name: "iseemypee", created: "2020-02-27T12:29:42.25...

Hat jemand eine Idee, was ich falsch mache?

Besten Dank und liebe Grüße!

Das Problem hier ist, dass SCORE ein String ist. Und im String ist es absteigend sortiert. Erst nach der ersten Stelle ( 70 > 150 >= 110), dann entsprechend die beiden, die mit 1 anfangen nach der zweiten Stelle (150 > 110) .. 

Ändere den Type von SCORE von "string" auf "number" und es sollte funktionieren.

//Edit:
Bei mongoose könntest du direkt das Schema anpassen - wie das bei monk geht, weiss ich nicht.

Bei MongoDB kannst du - wenn ich mich nicht irre - $convert nutzen, da hilft die Doku sicher weiter.

Die unschönste Methode wäre, beim Auslesen der Daten nochmal alle zu durchlaufen und jedes mal score = +score den Typ zu ändern. (Das + vor eine Variable führt im JavaScript dazu, dass diese Variable zu einem int konvertiert wird).

Bearbeitet von Memento

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.