sql >> Database >  >> NoSQL >> MongoDB

Strategieën voor realtime aggregaties in MongoDB

Het lijkt erop dat u twee velden age_rank . heeft toegevoegd , average_age . Dit zijn effectief berekende velden op basis van de gegevens die u al heeft. Als ik je het document met paginaweergaven en verjaardagen van gebruikers heb gegeven, zou het voor de klantcode echt triviaal moeten zijn om min/max, gemiddelde, enz. te vinden.

Het lijkt mij dat je MongoDB vraagt ​​om de aggregatie voor je server-side uit te voeren. Maar je voegt de beperking toe dat je Map/Reduce niet wilt gebruiken?

Als ik je vraag goed begrijp, zoek je iets waarbij je kunt zeggen 'voeg dit item toe aan een array en laat alle afhankelijke items zichzelf bijwerken' ? U wilt niet dat lezers enige logica uitvoeren, u wilt dat alles "magisch" gebeurt aan de serverzijde.

Er zijn dus drie verschillende manieren om dit aan te pakken, maar er is er momenteel slechts één beschikbaar:

  1. Schrijf deze logische client-side. Het klinkt niet als de oplossing die je wilt, maar het zal werken. Als je de onderliggende gegevens hebt, zou het in de meeste talen vrij triviaal moeten zijn om een ​​max/min/med/avg te maken.
  2. Maak gebruik van de aankomende functies voor Aggregation . Deze zijn niet gepland tot 1.9.x. Verbeterde aggregatie maakt het mogelijk om de gegevens te extraheren waarnaar u op zoek bent, maar u moet nog steeds de juiste query's schrijven. De onderliggende database bevat nog steeds niet de gegevens die u zoekt.
  3. Je hebt triggers nodig . Als u echt wilt dat de database altijd consistent is en samengevatte gegevens bevat, dan is dit wat u nodig heeft. De triggerfunctie bestaat echter nog niet.

Helaas is je enige optie op dit moment #1. Gelukkig ken ik meerdere mensen die optie #1 met succes gebruiken.



  1. Mongodb-verbindingsfout hoewel docker in springboot

  2. MongoDB $filter

  3. Node.JS object prototype mag alleen een Object of null zijn met Redis

  4. groeperen op datums in mongodb