8 Stimmen

Neueste und nächstgelegene Beiträge finden, Grenze 20

Nehmen wir an, ich habe eine Reihe von Beiträgen (für einen Feed, wie einen Twitter/Facebook/Foursquare-Feed) in MongoDB, und jeder Beitrag hat eine Standort & a Zeitstempel .

Wie bekomme ich am besten die neuesten und nächsten Beiträge, begrenzt auf 20 Beiträge?

Auch dies ist eine subjektive Frage. Nehmen wir an, Sie können angeben $maxDistance und die maximale Zeit seit jetzt (ich bin nicht sicher, wie Sie es sonst tun würden.). Wie würden Sie sie spezifizieren? Würden Sie nach der jüngsten oder der nächstgelegenen Zeit sortieren, oder würden Sie es zufällig lassen oder anders sortieren? Welcher Sortieralgorithmus ist Ihrer Meinung nach am interessantesten?

2voto

Chris Fulstow Punkte 39665

Ich nehme an, dass Sie am Ende eine Liste von Beiträgen erhalten, die zwei diskrete Rangordnungsdimensionen haben, d. h.:

{ age: 86400, distance: 1000 }
{ age: 172800, distance: 5000 }
{ age: 57600, distance: 20000 }
{ age: 288000, distance: 8000 }

Es spielt keine Rolle, was die Einheiten sind, sagen wir Sekunden und Meter. Wenn Sie möchten, dass sich beide auf den Sortierrang auswirken, erhalten Sie einen Ranglistenalgorithmus, der im einfachsten Fall so aussieht:

rank = (C1 * age) + (C2 * distance)

Wo C 1 und C 2 sind Konstanten, die Sie verändern können, um die Gewichtungen zu optimieren. Die Werte hängen davon ab, welche Einheiten Sie verwenden und wie viel Einfluss Sie den einzelnen Dimensionen beimessen.

Eine andere Möglichkeit wäre, zuerst nach einem Zeitaggregat und dann nach der Entfernung zu ordnen, also alle Beiträge von heute nach der Entfernung, gefolgt von denen von gestern nach der Entfernung und so weiter. Oder umgekehrt, erst nach Entfernung, dann nach Alter, also alle Beiträge innerhalb von (0 - 1000m) nach Alter geordnet, gefolgt von allen Beiträgen innerhalb von (1001 - 2000m) und so weiter.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X