Как получать среднюю величину данных в день в Mongodb?

Я хочу знать, есть ли способ получать среднюю величину данных в день используя добавление. Здесь есть образец моих данных:

[{"eApa":70519217,"pReacTotal":-111920,"pAparTotal":169404,"eCap":44641702,"eInd":478186,"vL1":127.646484375,"eActImp":41766944,"time":1564763657341},{"eApa":70520927,"pReacTotal":-123544,"pAparTotal":159832,"eCap":44642873,"eInd":478186,"vL1":127.9453125,"eActImp":41768133,"time":1564763694724},{"eApa":70522183,"pReacTotal":-139188,"pAparTotal":176512,"eCap":44643864,"eInd":478186,"vL1":127.771484375,"eActImp":41768890,"time":1564763716707},{"eApa":70522513,"pReacTotal":-155828,"pAparTotal":196372,"eCap":44644128,"eInd":478186,"vL1":127.865234375,"eActImp":41769086,"time":1564763722905},{"eApa":70524589,"pReacTotal":-165072,"pAparTotal":226156,"eCap":44645715,"eInd":478186,"vL1":127.486328125,"eActImp":41770404,"time":1564763760126},{"eApa":70526081,"pReacTotal":-168376,"pAparTotal":249252,"eCap":44646779,"eInd":478186,"vL1":127.142578125,"eActImp":41771487,"time":1564763782323}]

Поскольку он может видеть, поле времени - длинного типа, но я не знаю, как получать среднюю величину данных, которая соответствует в один день. Я хочу сказать, данные в примере - для 2 августа, есть больше данных, которые для 3 августа и до настоящей даты. И я хочу получить одинокую среднюю величину для каждого дня для других полей, например, начало 2 августа в 0:00:00 даже их 23:59:59.

Здесь находится код в Nodejs, который приносит данные:

TestC.aggregate([
            {
                '$match': {
                    'time': {
                        '$gte': new Date(Date.now() - (/* 86400 */ 2332800 * 1000))
                    }
                }
            }, {
                '$project': {
                    '_id': 0,
                    'pAparTotal': 1,
                    'pReacTotal': 1,
                    'eApa': 1,
                    'eInd': 1,
                    'eCap': 1,
                    'eActImp': 1,
                    'time': {
                        '$toLong': '$time'
                    }
                }
            }, {
                '$sort': {
                    'time': 1
                }
            }
        ]).exec((ex, data) => {
            if (ex) return res.status(500).send({ message: "Error tryng to get the data" });

            if (!data) return res.status(400).send({ message: No data." });

            if (data) return res.status(200).send(data)
        });

Спасибо!

5
задан 29.08.2019, 20:33
1 ответ

С $group и $avg я верю в то, что podrГ-схвати, доставать то, что ты ищешь. То, что у меня не остается ясным, quГ© поля ты нуждаешься в том, чтобы достать средний показатель. Однако я оставляю тебе пример:

[
     {
       $group:
         {
           _id : { $dateToString: { format: "%Y-%m-%d", date: "$time" } },
           avgAmount: { $avg: { $multiply: [ "$price", "$quantity" ] } },
           avgQuantity: { $avg: "$quantity" }
         }
     }
]

Надеялся, что он служит тебе помощью.

0
ответ дан 01.12.2019, 19:34