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:
- 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í.
- 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.
- 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í.