как вычислить среднее значение с помощью mongodb и NumberLong

Я пытаюсь вычислить среднее значение из коллекции с помощью 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?

7
задан ekad 10 May 2017 в 19:08
поделиться