Ich möchte eine Liste der Beiträge aus der Datenbank basierend auf likes
und date
zeigen, denken Sie an die grundlegende "Trending" Artikel Seite.Mongoose Abfrage für "heiße" Beiträge
Ich möchte eine Formel wie score = likes/daysSinceCreation
verwenden und dann die ersten 10 Beiträge basierend auf dieser Punktzahl erhalten.
Wie kann ich diese Sortierfunktion mit mongoDB/Mongoose hinzufügen?
Posts.find().sort(???).limit(10).then(posts => console.log(posts));
Zur Zeit kann ich Top-Beiträge in der letzten Woche erhalten (finden, wenn das Erstellungsdatum größer als letzte Woche und um nach Punkten), aber wie kann ich eine komplexere Sortierfunktion implementieren, ohne alle Elemente aus der bekommen DB?
zB: Heute ist Freitag
ID CREATION_DAY LIKES
1 Monday 4 // score is 5/5 = 0
2 Tuesday 10 // score is 10/4 = 2
3 Wednesday 3 // score is 3/3 = 1
4 Thursday 20 // score is 20/2 = 10
5 Friday 5 // score is 5/1 = 5
sortierte Liste von IDs ist: [4 (Th), 5 (Fr), 2 (Tu), 3 (We), 1(Mo)]
Sie suchen, um sie zu paginieren, oder nur eine feste "Top 10"? Die einzige Möglichkeit, dies zu tun, ist die Verwendung der Aggregationspipeline. Aber wenn Sie es so machen, könnte es schwer werden, abhängig davon, wie oft es aufgerufen wird und wie viele Daten Sie haben, da Sie nach einer Berechnung sortieren würden. Ich würde höchstwahrscheinlich die IDs oder die Dokumente selbst in einer separaten "temporären" Sammlung aggregieren und dann nach dieser Sammlung fragen. Es ist ziemlich abhängig von der Größe Ihrer Daten, Abfrage/Berechnung/Update-Frequenzen, Paginierung, etc. – cdbajorin
Nun, es wird wahrscheinlich die Homepage der Website sein, wo Trending-Elemente angezeigt werden, denken Sie an reddit. So wird jeder Benutzer die Abfrage auslösen. Ich denke, es könnte zwischengespeichert und nur einmal pro Stunde oder so aktualisiert werden, das könnte funktionieren, denke ich. – Cristy
Können Sie Ihr 'Post'-Schema hinzufügen? – cdbajorin