Изглежда, че сте добавили две полета age_rank
, average_age
. Това са ефективно изчислени полета въз основа на данните, които вече имате. Ако ви дам документа с изгледи на страници и рождени дни на потребителите, би трябвало да е много тривиално клиентският код да намери мин./макс., средно и т.н.
Струва ми се, че искате MongoDB да извърши агрегацията за вас от страната на сървъра. Но вие добавяте ограничението, че не искате да използвате Map/Reduce?
Ако разбирам правилно въпроса ви, вие търсите нещо, където можете да кажете "добавете този елемент към масив и всички зависими елементи да се актуализират сами" ? Вие не искате читателите да изпълняват някаква логика, искате всичко да се случи "магически" от страната на сървъра.
Така че има три различни начина да се справите с това, но в момента е наличен само един от тях:
- Напишете тази логика от страна на клиента. Не звучи като решението, което искате, но ще работи. Ако разполагате с основните данни, правенето на max/min/med/avg би трябвало да е доста тривиално на повечето езици.
- Използвайте предстоящите функции за Агрегиране . Те не са планирани до 1.9.x. Подобреното агрегиране ще позволи да извлечете данните, които търсите, но пак ще трябва да пишете съответните заявки. Базовата база данни все още не съдържа данните, които търсите.
- Имате нужда от тригери . Ако наистина искате DB винаги да е последователна и да съдържа обобщени данни, тогава това е, от което се нуждаете. Функцията за задействане обаче все още не съществува.
За съжаление единствената ви опция в момента е №1. За щастие познавам няколко души, които успешно използват опция №1.