MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Zufälliges Ordnen einer Ergebnismenge in Mongo

Ich muss zustimmen:Am einfachsten ist es, einen zufälligen Wert in Ihre Dokumente einzubauen. Es muss auch kein enorm großer Wertebereich vorhanden sein -- die Zahl, die Sie wählen, hängt von der erwarteten Ergebnisgröße für Ihre Abfragen ab (1.000 - 1.000.000 verschiedene ganze Zahlen sollten für die meisten Fälle ausreichen).

Wenn Sie Ihre Abfrage ausführen, machen Sie sich keine Gedanken über das Zufallsfeld – indizieren Sie es stattdessen und verwenden Sie es zum Sortieren. Da zwischen der Zufallszahl und dem Dokument keine Übereinstimmung besteht, sollten Sie ziemlich zufällige Ergebnisse erhalten. Beachten Sie, dass Kollisionen wahrscheinlich dazu führen, dass Dokumente in natürlicher Reihenfolge zurückgegeben werden.

Während dies ist sicherlich ein Hack, haben Sie einen sehr einfachen Fluchtweg:Angesichts der schemafreien Natur von MongoDB können Sie einfach aufhören, das Zufallsfeld aufzunehmen, sobald der Server die zufällige Sortierung unterstützt. Wenn die Größe ein Problem darstellt, können Sie einen Batch-Job ausführen, um das Feld aus vorhandenen Dokumenten zu entfernen. Es sollte keine wesentliche Änderung in Ihrem Client-Code geben, wenn Sie ihn sorgfältig entwerfen.

Eine alternative Option wäre, lange und gründlich über die Anzahl der Ergebnisse nachzudenken, die für eine bestimmte Abfrage randomisiert und zurückgegeben werden. Es ist möglicherweise nicht übermäßig teuer, den Client-Code einfach zu mischen (d. h. wenn Sie nur die letzten 10.000 Beiträge berücksichtigen).