Parece que você adicionou dois campos
age_rank
, average_age
. Esses são campos efetivamente calculados com base nos dados que você já possui. Se eu lhe der o documento com visualizações de página e aniversários de usuários, deve ser realmente trivial para o código do cliente encontrar min/max, average, etc. Parece-me que você está solicitando que o MongoDB execute a agregação para você no lado do servidor. Mas você está adicionando a limitação de não querer usar Map/Reduce?
Se estou entendendo sua pergunta corretamente, você está procurando algo em que possa dizer "adicione este item a uma matriz e faça com que todos os itens dependentes se atualizem" ? Você não quer que os leitores executem nenhuma lógica, você quer que tudo aconteça "magicamente" no lado do servidor.
Portanto, existem três maneiras diferentes de lidar com isso, mas apenas uma delas está disponível no momento:
- Escreva esta lógica do lado do cliente. Não soa como a solução que você deseja, mas funcionará. Se você tiver os dados subjacentes, fazer um max/min/med/avg deve ser bastante trivial na maioria dos idiomas.
- Aproveite os próximos recursos para Agregação . Estes não estão programados até 1.9.x. A agregação aprimorada permitirá extrair os dados que você está procurando, no entanto, você ainda terá que escrever as consultas apropriadas. O banco de dados subjacente ainda não contém os dados que você está procurando.
- Você precisa de gatilhos . Se você realmente deseja que o banco de dados seja sempre consistente e contenha dados resumidos, isso é o que você precisa. No entanto, o recurso de acionadores ainda não existe.
Infelizmente, sua única opção agora é #1. Felizmente, conheço várias pessoas que estão usando a opção nº 1 com sucesso.