提问者:小点点

计算MongoDB聚合和节点JS中最近200天的平均值


我有一个脚本,用于计算MongoDB中每个集合的平均数据。 但是,由于我有超过1000天的记录,我希望只计算最近200天的平均量

目前我的脚本采取的整个数据,这是在收集(1000天+)。

目标:如何设置最近200天的范围,以计算它们的平均体积。 还有一件很重要的事,就是我每天还想用上200天。

平均聚合框架

const saveToDatebase = async(symbol, BTCdata) => {
    try {
        const url = 'mongodb://username:passwprd@ipaddress/port?retryWrites=true&w=majority';
        let dateTime = getDateTime();
        let db = await MongoClient.connect(url, { useUnifiedTopology: true });
        const dbo = db.db('Crypto');
        const myobj = Object.assign({ Name: symbol, Date: dateTime }, BTCdata[0]);
        await dbo.collection(symbol).insertOne(myobj);
        const average = await dbo.collection(symbol).aggregate([{
            '$group': {
            _id:null,
                'Volume': {
                    '$avg': '$Volume'
                }
            }
        }]).toArray();
        console.log('1 document inserted');
        console.log(average);
        db.close();
    } catch (e) {
        console.error(e)
    }
};

编辑如下代码后的EDIT1>>

const average = await dbo.collection(symbol).aggregate([{
    $match: {
        $gte: ["$dateTime", { $subtract: ["$$NOW", 200 * 60 * 60 * 24 * 1000] }]
    },
    "$group": {
        _id: null,
        "Volume": {
            "$avg": "$Volume"
        }
    }
}]).toArray();

我收到此错误>; MongoError:管道阶段规范对象只能包含一个字段。

编辑2代码在有如下代码之后,我收到这个错误-mongoerror:未知的顶级操作符:$gte

const average = await dbo.collection(symbol).aggregate([{
                $match: { $gte: ["$dateTime", { $subtract: ["$$NOW", 200 * 60 * 60 * 24 * 1000] }] }
            },
            {
                "$group": {
                    _id: null,
                    "Volume": {
                        "$avg": "$Volume"
                    }
                }
            }
        ])

下面是MongoDB中文档的样子。


共1个答案

匿名用户

在对文档进行分组之前,必须对它们进行筛选。 应该是这样的:

db.collection.aggregate([
  {
    $match: {
      $expr: {
        $gte: [
          "$dateTime",
          {
            $subtract: [
              "$$NOW",
              200*60*60*24*1000
            ]
          }
        ]
      }
    }
  },
  {
    "$group": {
      _id: null,
      "Volume": {
        "$avg": "$Volume"
      }
    }
  }
])