Я пытаюсь вычислить среднее значение из коллекции с помощью java-драйвера mongodb, например:
DBObject condition =
new BasicDBObject("pluginIdentifier", plugin.getIdentifier());
DBObject initial = new BasicDBObject();
initial.put("count", 0);
initial.put("totalDuration", 0);
String reduce = "function(duration, out) { out.count++;
out.totalDuration+=duration.floatApprox; }";
String finalize = "function(out) { out.avg = out.totalDuration.floatApprox /
out.count; }";
DBObject avg = durationEntries.group(
new BasicDBObject("pluginIdentifier", true),
condition, initial, reduce, finalize);
System.out.println(avg);
"duration" - это NumberLong (в java это Long, вероятно, драйвер java преобразует Это). После некоторых поисков я выяснил, что для извлечения числа одним из возможных способов было использование .floatApprox, и это также работает в консоли mongodb:
> db.DurationEntries.findOne().duration.floatApprox
5
Однако выполнение вышеуказанного java-кода не будет вычислять среднее значение, но вместо этого возвращает это
[{"pluginIdentifier":"dummy", "count":7.0, "totalDuration":NaN, "avg":NaN}]
Я пробовал несколько вариантов, с .floatApprox и без него, но до сих пор мне удавалось получить лишь некоторые странные конкатенации строк.
Мой вопрос: что я делаю не так / как мне поступить вычислить среднее значение для одного столбца NumberLong?