Как говорит @maga, Map / Reduce слишком медленный для агрегации в реальном времени, и хранение поля подсчета является лучшим способом.
Другой вариант - вернуть весь документ (или определенные поля) в ваше приложение и проанализировать его там.Это может быть лучше, когда вы не знаете, сколько будет существовать вложенных уровней.
Несмотря на то, что некоторые люди могут подумать, в этом нет абсолютно никакого вреда.Ваш сервер базы данных с удовольствием вернет этот документ очень быстро и позволит вашему приложению обрабатывать постобработку.
С точки зрения масштабируемости, этот подход означает, что вы будете масштабировать свои серверы приложений (которые обычно намного более доступны) вместо серверов баз данных (которые обычно более дороги).