$avg не возвращает значение в запросе MongoDb

Я работаю с NodeJs и MongoDb на Raspbian. Я использую монаха в качестве водителя. У меня есть документы в базе данных, которые выглядят так:

var data = {
  ga  : id,       // Group address format (string)
  val : val,      // raw value (float)
  ts  : now       // JavaScript time stamp
}

Я использую этот код для извлечения сгруппированных и агрегированных данных:

const dbRawColl = req.db.get('raw'); // this is the collection
var project = {
    $project:{
      _id: 0,
      d: { $add: [ new Date(0), "$ts" ] },
      v: "$val"
    }
  };
  // filter by (this works)
  var match = { $match: {  'ga': '0/7/71' } };
  // group results
  var group = { 
    $group: { 
      _id:  { day: { $dayOfMonth: '$d' } },
      min: { $min: '$v' },
      max: { $max: '$v' },
      avg: { $avg: '$v' },
      count: { $sum: 1 } 
    } 
  };
dbRawColl.aggregate([ match, project, group ], function(e, docs) {
  // send "docs" here
}

Запрос работает, я вижу количество сгруппированных результатов в день. Ответ, который я получаю, выглядит так

[{ "_id": { "day": 20 }, 
   "min": "16.38",
   "max": "29.64",
   "avg": 0,
   "count": 2687},
 ... more results omitted for clarity
]

Вопрос в том, почему "min" и "max" возвращают правильные результаты, в то время как "$avg" всегда равно 0. Что мешает "$avg" выполнять свою работу. Вряд ли он равен 0 из-за примерно 50000 выборок в БД с огромным диапазоном значений (от 10 до 30).

Дополнительный вопрос: почему "min" и "max" возвращают строки в результате? Само значение кажется действительным для меня, глядя на образцы.

OS, Node, Express, MongoDb являются текущей версией на 8/2016.

Изменить, чтобы ответить на вопрос, это типичный документ:

{
  ga  : "0/7/71",     // Group address format (string)
  val : "24.45",      // raw value (float)
  ts  : 12345678909   // JavaScript time stamp
}

Значение, очевидно, является строкой. Некоторые значения являются фактическими строками, поэтому преобразование всех в число не будет работать. Но для полей, которые я запрашиваю с моим $match, гарантируется, что значения могут быть преобразованы в Number.

0 ответов

Другие вопросы по тегам