Как округлить значение в агрегации mongodb - PullRequest
1 голос
/ 16 марта 2020

У меня есть функция, которая вычисляет минимальное, максимальное и среднее значение для данного диапазона дат из коллекции дБ. Мне нужны минимальное, максимальное и среднее значение, но как округленные значения.

Образец Do c:

 {
    maxspeed: 27.264,
    minspeed: 11.5,
    meanspeed: 14.407407407
 }

Код:

exports.findspeedminmaxmean = (req, res) => {
    var a=req.query.osm_start_node_id;
    var b= req.query.osm_end_node_id;
    var date1=req.query.utc_timestamp;
    var num1=parseInt(a);
    var num2=parseInt(b);
     console.log(a);

    speeddata.aggregate([{ $match: { 'osm_start_node_id': num1,'osm_end_node_id':num2,'utc_timestamp':{$gte:date1[0],$lte:date1[1]}}},
    {$group:{_id:"$osm_start_node_id",_id:"$osm_end_node_id",maxspeed:{$max:"$speed_mph_mean"},
    minspeed:{$min:"$speed_mph_mean"},
    meanspeed:{$avg:"$speed_mph_mean"}}}])
  .then(stable => {
      if(!stable) {
          return res.status(404).send({
              message: "record not found " + req.query.osm_way_id
          });            
      }
      res.send(stable);
      console.log(stable);
  }).catch(err => {
      if(err.kind === 'osm_way_id') {
          return res.status(404).send({
              message: "record not found " + req.query.osm_way_id
          });                
      }
      return res.status(500).send({
          message: "something wrong with name " + req.query.osm_way_id
      });
  });
 };

1 Ответ

1 голос
/ 16 марта 2020

В версии MongoDB> = 4.2 вы можете использовать $ round :

db.collection.aggregate([
  {
    $addFields: {
      maxspeed: {
        $round: [
          "$maxspeed",
          0
        ]
      },
      minspeed: {
        $round: [
          "$minspeed",
          0
        ]
      },
      meanspeed: {
        $round: [
          "$meanspeed",
          0
        ]
      }
    }
  }
])

Тест: MongoDB-Playground

...