Я не эксперт MongoDB, но я знаю, как работают индексы SQL, и он должен быть очень похожим.
На мой взгляд, 30M - это большое количество записей, но Mongo должен с этим справиться - но опять же, это зависит,Самый важный вопрос: есть ли у вас один индекс, который содержит 3 поля или 3 отдельных индекса?- у вас должен быть один индекс с 3 полями (или даже 4).Также этот индекс должен содержать поле $ user_uuid.Зачем?Поскольку он используется в выражении group by, поэтому, если $ user_uuid не проиндексирован, то после совпадения MongoDB необходимо извлечь $ user_uuid из исходной коллекции для каждой записи - и это будет медленно.
Если это все еще не произойдетзатем я напишу код, который объединит все действия для всех пользователей за один день и изменит ваш запрос, чтобы использовать предварительно сгруппированные данные.