IBM Cloudant 的聚合查询,它基本上是 couchDB

Aggregate query for IBM Cloudant which is basically couchDB

我是 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"
        }
    }
}

如果有人 idea/suggestions 关于如何在 IBM Cloudant 中编写设计文档,请帮助我!谢谢! P.S。我们仍然需要为这个项目做后端开源。 (可能需要一些时间)

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

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

(我之前解决这个问题的方法是将传入数据复制到 "newest readings" 存储中,然后以正常方式将其写入数据库。如果您只永远想要最新的阅读。)