Comparação de agregação do MongoDB: group (), $ group e MapReduce

Estou um pouco confuso sobre quando usar group (), agregar com $ group ou mapreduce. Eu li a documentação emhttp://www.mongodb.org/display/DOCS/Agregation para o grupo (),http://docs.mongodb.org/manual/reference/aggregation/group/#_S_group para $ group .. A fragmentação é a única situação em que group () não funciona? Além disso, tenho a sensação de que $ group é mais poderoso que group () porque ele pode ser usado em conjunto com outros operadores de pipeline da estrutura de agregação. Como o $ group se compara com o mapreduce? Eu li em algum lugar que não gera nenhuma coleção temporária enquanto mapreduce faz. É assim mesmo?
Alguém pode apresentar uma ilustração ou me guiar para um link no qual esses três conceitos são explicados juntos, usando os mesmos dados de amostra, para que eu possa compará-los facilmente?

EDITAR:
Além disso, seria ótimo se você pudesse apontar algo novo especificamente nesses comandos desde o lançamento da nova versão 2.2.

questionAnswers(1)

yourAnswerToTheQuestion