【问题标题】:Aggregate query for IBM Cloudant which is basically couchDBIBM Cloudant 的聚合查询,基本上是 couchDB
【发布时间】:2017-03-03 12:14:37
【问题描述】:

我是http://airpollution.online/ 的贡献者,这是一个开放环境 Web 平台,它构建了开源,具有 IBM Cloudant 作为它的数据库服务。

平台的架构是这样的,我们需要从集合中获取每个空气污染测量设备的最新数据。就我使用 MongoDB 的经验而言,我编写了聚合查询,以根据各个集合中可用的每个文档中的每个纪元时间键来获取每个设备的最新数据。

示例聚合查询是:

db.collection("hourly_analysis").aggregate([
{
    $sort: {
        "time": -1,
        "Id": -1
    }
}, {
    $project: {
        "Id": 1,
        "data": 1,
        "_id": 0
    }
}, {
    $group: {
        "_id": "$Id",
        "data": {
            "$last": "$$ROOT"
        }
    }
}

如果有人对如何在 IBM Cloudant 中编写设计文档有想法/建议,请帮助我!谢谢! 附:我们仍然需要为这个项目做后端开源。 (可能需要一些时间)

【问题讨论】:

  • 你能概括一下你想要做什么吗?数据是什么样的,您需要从这些数据中回答什么问题?从这个 MongoDB 示例中,我不确定您在 CouchDB 中拥有什么以及您打算检索什么。
  • 你好@LornaMitchell,我想做的是有来自不同设备的 GB 数据。所以我需要挑选每台设备的最新数据。每个文档在纪元时间内都有“deviceId”和“time”。作为一个例子,你可以试试这个开放的 api,它给出了openenvironment.p.mashape.com/all/public/devices 的最新数据使用标题“X-Mashape-Key”:“AznHXmVhecmsh2eRvaAX42EKCmj3p1lRLpzjsnks0zMETqI4Mg”

标签: node.js couchdb cloudant node-red


【解决方案1】:

在 CouchDB/Cloudant 中,这通常比临时查询更好地作为视图来完成。这是一个棘手的问题,但试试这个: - 将设备 ID 和时间戳作为复合键的两个部分发出的映射步骤,以及作为值读取的设备 - 查找最大时间戳并返回 both 最大(最近)时间戳和随之而来的读数的减少步骤(这两个值都是必需的,因为在减少时,我们需要知道时间戳,所以我们可以比较它们) - group_level 设置为 1 的视图将为您提供每个设备的最新读数。

在 Cloudant 中的大多数情况下,您可以使用内置的 reduce 函数,但在这里您需要一个键函数。

(我之前解决此问题的方法是将传入数据复制到“最新读数”存储中,并以正常方式将其写入数据库。如果您只想要最新阅读。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 2017-04-04
    相关资源
    最近更新 更多