Ответ на самом деле «зависит» - если поля, которые вам нужны для вычислений, очень большие, выполнение вычислений на стороне сервера с JS может быть намного быстрее, просто сокращая сетевой трафик.
Но выполнение JS на стороне сервера также удерживает блокировку записи, поэтому в зависимости от сложности вычислений может оказаться более эффективным просто выполнить вычисления на стороне клиента и затем просто обновить документ.
Лучше всего сделать простой тест с использованием Ruby и JS на стороне сервера. Если вам необходимо одновременно обслуживать другой трафик базы данных, это также следует учитывать, поскольку ваш% блокировки может отличаться в двух сценариях (вы можете отслеживать это с помощью mongostat).
Кроме того, имейте в виду, что использование db.eval не будет работать с шардингом, поэтому избегайте его, если вы используете защищенную среду или планируете это в будущем.