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

Strategien für Echtzeit-Aggregationen in MongoDB

Es sieht so aus, als hätten Sie zwei Felder age_rank hinzugefügt , average_age . Dies sind effektiv berechnete Felder, die auf den Daten basieren, die Sie bereits haben. Wenn ich Ihnen das Dokument mit Seitenaufrufen und Benutzergeburtstagen gegeben habe, sollte es für den Client-Code wirklich trivial sein, Min/Max, Durchschnitt usw. zu finden.

Es scheint mir, dass Sie MongoDB bitten, die Aggregation für Sie serverseitig durchzuführen. Aber Sie fügen die Einschränkung hinzu, dass Sie Map/Reduce nicht verwenden möchten?

Wenn ich Ihre Frage richtig verstehe, suchen Sie nach etwas, wo Sie "dieses Element zu einem Array hinzufügen und alle abhängigen Elemente aktualisieren lassen" sagen können ? Sie möchten nicht, dass die Leser irgendeine Logik ausführen, Sie möchten, dass alles "magisch" auf der Serverseite geschieht.

Es gibt also drei verschiedene Möglichkeiten, dies anzugehen, aber derzeit ist nur eine davon verfügbar:

  1. Schreiben Sie diese Logik clientseitig. Es klingt nicht nach der gewünschten Lösung, aber es wird funktionieren. Wenn Sie die zugrunde liegenden Daten haben, sollte das Erstellen von max/min/med/avg in den meisten Sprachen ziemlich trivial sein.
  2. Nutzen Sie die kommenden Funktionen für Aggregation . Diese sind erst ab 1.9.x geplant. Durch die verbesserte Aggregation können Sie die gesuchten Daten extrahieren, Sie müssen jedoch weiterhin die entsprechenden Abfragen schreiben. Die zugrunde liegende Datenbank enthält immer noch nicht die gesuchten Daten.
  3. Sie benötigen Trigger . Wenn Sie wirklich möchten, dass die Datenbank immer konsistent ist und zusammengefasste Daten enthält, dann ist dies das, was Sie brauchen. Die Trigger-Funktion existiert jedoch noch nicht.

Leider ist Ihre einzige Option im Moment Nr. 1. Glücklicherweise kenne ich mehrere Leute, die Option Nr. 1 erfolgreich verwenden.