Если каждый башмак является документом с date_in
и date_out
, то ваша функция уменьшения будет +1, если date_out
равно нулю, и +0 (без изменений), если date_out
не равно нулю.Это даст вам общее количество обуви на складе.
Чтобы вычислить среднее время для каждой обуви, вы знаете время на складе.Таким образом, функция уменьшения просто накапливает среднее значение.Так как функции приведения должны быть коммутативными и ассоциативными, вы используете другой алгоритм усреднения.Самый простой способ - уменьшить массив до [sum, count]
, где sum
- это накопитель всех времен для всех ботинок, а count
- счетчик подсчитанного количества ботинок.Затем клиент просто делит sum / count
, чтобы вычислить окончательное среднее значение.
Я думаю, что вы можете объединить оба из них в одно большое сокращение, если хотите, возможно, создавая объект типа {"shoes in warehouse": 1, "average time in warehouse": [253, 15]}
.
Однако, если вы можете принять два разных представления для этих данных, тогда существует среднее значение для ярлыка.На карте emit(null, time)
, где time
- время, проведенное на складе.В режиме уменьшения установите полное значение уменьшения на _stats
(см. Встроенные функции уменьшения ).Вывод представления будет объектом с уже вычисленными sum
и count
.