sql >> Databasteknik >  >> NoSQL >> MongoDB

Strategier för realtidsaggregationer i MongoDB

Det verkar som att du har lagt till två fält age_rank , average_age . Dessa är effektivt beräknade fält baserat på den data du redan har. Om jag gav dig dokumentet med sidvisningar och användarfödelsedagar borde det vara väldigt trivialt för klientkoden att hitta min/max, medelvärde osv.

Det verkar för mig att du ber om MongoDB att utföra aggregeringen för din serversida. Men du lägger till begränsningen att du inte vill använda Map/Reduce?

Om jag förstår din fråga rätt, letar du efter något där du kan säga "lägg till det här objektet i en array och få alla beroende objekt att uppdatera sig själva" ? Du vill inte att läsarna ska utföra någon logik, du vill att allt ska ske "magiskt" på serversidan.

Så det finns tre olika sätt att tackla detta, men bara ett av dem är för närvarande tillgängligt:

  1. Skriv den här logiska klientsidan. Det låter inte som den lösning du vill ha, men det kommer att fungera. Om du har den underliggande informationen borde det vara ganska trivialt att göra en max/min/med/avg på de flesta språk.
  2. Utnyttja de kommande funktionerna för Aggregation . Dessa är inte schemalagda förrän 1.9.x. Förbättrad aggregering gör det möjligt att extrahera data du letar efter, men du måste fortfarande skriva lämpliga frågor. Den underliggande databasen innehåller fortfarande inte den data du letar efter.
  3. Du behöver utlösare . Om du verkligen vill att DB alltid ska vara konsekvent och innehålla sammanfattade data, då är detta vad du behöver. Utlösarfunktionen finns dock inte ännu.

Tyvärr är ditt enda alternativ just nu #1. Lyckligtvis känner jag till flera personer som använder alternativ #1 framgångsrikt.



  1. Mongodb aggregerade argument till $lookup måste vara strängar

  2. Mongodb fel misslyckades med att använda textindex för att tillfredsställa $text-frågan

  3. $lookup på ObjectIds i en array

  4. Skapa MongoDB Unique Key med C#