我每分钟都有一个数据流入Mongo集合,我使用下面的查询来获取指定时间范围之间的数据,

mongo_client.db("db")
      .collection(collection)
      .aggregate([
        {
          $addFields: {
            timestampISO: {
              $toLong: "$periodicMessageBase.messageTimestamp",
            },
          },
        },
        {
          $match: {
            deviceId: deviceId,
            periodicMessageBase: {
              $exists: true,
            },
            timestampISO: {
              $lt: "1694008207000", // unix timestamp
              $gte: "1695002207000",
            },
          },
        },
        {
          $project: {
            _id: 0,
            DeviceID: "$deviceId",
            Timestamp: "$timestampISO",
            L1_VoltageAngleMean: {
              $ifNull: [
                {
                  $arrayElemAt: ["$periodicMessageBase.vAngle.meanVal", 0],
                },
                0,
              ],
            }
          },
        },
      ])
      .sort({
        Timestamp: -1,
      })

但是,当我搜索长时间范围而不是每分钟的数据时,是否有可能获得每小时的数据?

推荐答案

如果您的MongoDB版本是5.0或更高版本,一种 Select 是将您的$project版本替换为以下两个版本:

{$project: {
      _id: 0,
      DeviceID: "$deviceId",
      Timestamp: {$dateTrunc: {date: {$toDate: "$timestampISO"}, unit: "hour"}},
      L1_VoltageAngleMean: {
          $ifNull: [{$arrayElemAt: ["$periodicMessageBase.vAngle.meanVal", 0]}, 0]
       }
}},
{$group: {
    _id: "$Timestamp",
    DeviceID: {$first: "$DeviceID"},
    L1_VoltageAngleMean: {$avg: "$L1_VoltageAngleMean"}
}}

看看它在playground example号公路上是如何工作的

Node.js相关问答推荐

在child_Process中持久运行SSH命令

从MongoDB获取Tree数据

带有apache Couch-db和Nano的推荐引擎:过滤特定用户的视图

动态设置元数据,无需重复请求 NextJS 13

yarn 安装失败,因为 node-gyp 正在寻找过时的 node 版本标头

如何防止 Chrome 通过 Selenium 崩溃?

Node.js 上的 CLI 应用程序如何通过 child_process 将选项值作为参数传递给 Shell 命令

Next.js 在我的电脑上没有构建错误,但它们在使用 Vercel 部署时发生

使用正则表达式查找文档,但输入是数组

Node.js |如何在微服务之间转发标头?

在 node:readline 中按 CTRL+D 时会发出什么信号?

fs.writefile 选项参数的可能值,尤其是只读文件的整数

通过 npm 导入 Sass

Node.js mongodb 驱动程序异步/等待查询

如何在离线时安装 npm 包?

Node.js 17.0.1 Gatsby 错误-数字信封 routine ::不支持 ... ERR_OSSL_EVP_UNSUPPORTED

Node.js 与 .net 中的异步/等待

如何在 NodeJS 中拆分和修改字符串?

如何在 node.js 沙箱中安全地运行用户提交的脚本?

从 node.js 连接到 mongodb 时出现 ECONNREFUSED 错误