sql >> Databáze >  >> NoSQL >> MongoDB

Strategie pro agregace v reálném čase v MongoDB

Zdá se, že jste přidali dvě pole age_rank , average_age . Toto jsou efektivně vypočítaná pole na základě dat, která již máte. Pokud jsem vám dal dokument se zobrazeními stránky a narozeninami uživatele, mělo by být pro klientský kód opravdu triviální najít min/max, průměr atd.

Zdá se mi, že žádáte, aby MongoDB provedl agregaci pro vás na straně serveru. Ale přidáváte omezení, že nechcete používat Map/Reduce?

Pokud správně rozumím vaší otázce, hledáte něco, kde byste mohli říct "přidat tuto položku do pole a nechat všechny závislé položky aktualizovat samy" ? Nechcete, aby čtenáři vykonávali nějakou logiku, chcete, aby se vše dělo „magicky“ na straně serveru.

Existují tedy tři různé způsoby, jak to vyřešit, ale v současné době je k dispozici pouze jeden z nich:

  1. Napište tuto logiku na straně klienta. Nezní to jako řešení, které chcete, ale bude to fungovat. Máte-li podkladová data, mělo by být provedení max/min/med/avg ve většině jazyků docela triviální.
  2. Využijte připravované funkce pro Agregaci . Ty jsou naplánovány až 1.9.x. Vylepšená agregace umožní extrahovat data, která hledáte, ale stále budete muset psát příslušné dotazy. Podkladová databáze stále neobsahuje data, která hledáte.
  3. Potřebujete spouštěče . Pokud opravdu chcete, aby DB byla vždy konzistentní a obsahovala souhrnná data, pak je to to, co potřebujete. Funkce spouštěčů však zatím neexistuje.

Bohužel, vaše jediná možnost je teď #1. Naštěstí vím o několika lidech, kteří možnost #1 úspěšně používají.



  1. MEAN-Stack uložte pole v MongoDB pomocí mongoose

  2. Redis — nejlepší způsob, jak uložit velkou mapu (slovník)

  3. Mongo agregace Shoda více hodnot

  4. Mongodb:souhrnné pole celých čísel pro každou pozici pole