Wygląda na to, że dodałeś dwa pola age_rank
, average_age
. Są to skutecznie obliczane pola na podstawie danych, które już posiadasz. Jeśli podałbym ci dokument z odsłonami stron i datami urodzin użytkowników, znalezienie przez kod klienta min./maks., średniej itp. powinno być naprawdę proste.
Wydaje mi się, że prosisz MongoDB o wykonanie agregacji po stronie serwera. Ale dodajesz ograniczenie, że nie chcesz używać Map/Reduce?
Jeśli dobrze rozumiem Twoje pytanie, szukasz czegoś, w czym możesz powiedzieć „dodaj ten element do tablicy i zaktualizuj wszystkie elementy zależne” ? Nie chcesz, aby czytelnicy wykonywali jakąkolwiek logikę, chcesz, aby wszystko działo się „magicznie” po stronie serwera.
Istnieją więc trzy różne sposoby rozwiązania tego problemu, ale obecnie dostępny jest tylko jeden z nich:
- Zapisz tę logikę po stronie klienta. To nie brzmi jak rozwiązanie, którego szukasz, ale zadziała. Jeśli masz podstawowe dane, wykonanie max/min/med/avg powinno być dość proste w większości języków.
- Wykorzystaj nadchodzące funkcje Agregacja . Nie są one zaplanowane do 1.9.x. Ulepszona agregacja pozwoli wydobyć dane, których szukasz, jednak nadal będziesz musiał napisać odpowiednie zapytania. Bazowa baza danych nadal nie zawiera danych, których szukasz.
- Potrzebujesz wyzwalaczy . Jeśli naprawdę chcesz, aby baza danych była zawsze spójna i zawierała podsumowane dane, to jest to, czego potrzebujesz. Jednak funkcja wyzwalaczy jeszcze nie istnieje.
Niestety, jedyną opcją w tej chwili jest #1. Na szczęście znam kilka osób, które z powodzeniem korzystają z opcji 1.