2017-03-03 58 views
1

我在http://airpollution.online/贡献者,它是具有IBM Cloudant,因为它是数据库服务的开放环境的网络平台构建开源的。用于IBM Cloudant汇总查询这基本上是CouchDB的

平台的架构是,我们需要从集合中获取每个空气污染测量设备的最新数据,这样的方式。就我的经验而言,我使用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设计文件的建议,请帮帮我!谢谢! P.S.我们仍然需要为此项目制作后端开源代码。 (可能需要一些时间)

+0

你能给出你想要做的一般概述吗?数据是什么样的,你需要从这些数据中回答什么问题?我不确定从这个MongoDB示例中了解CouchDB中的内容以及您想要检索的内容。 –

+0

你好@LornaMitchell,我想要做的是有来自不同设备的数据GB。所以我需要选择每个设备的最新数据。每个文档在时代都有“deviceId”和“time”。作为一个例子,你可以试试这个开放的API,它给https://openenvironment.p.mashape.com/all/public/devices使用标题“X-Mashape-Key”的最新数据:“AznHXmVhecmsh2eRvaAX42EKCmj3p1lRLpzjsnks0zMETqI4Mg” – jimish

回答

2

在CouchDB中/ Cloudant这通常更好,因为比即席查询的图来完成。这是一个棘手的问题,但试试这个: - 一个映射步骤,将设备ID和时间戳记作为复合键的两个部分,并将设备读数作为值 - 减少步骤,查找最大时间戳并返回最大(最近)的时间戳和随之而来的读数(这两个值都是需要的,因为当重新还原时,我们需要知道时间戳,因此我们可以比较它们) - 将group_level设置为1的视图会给你最新的读取每个设备。

在Cloudant你可以使用内置的功能降低,但在这里,你想要一个键的功能,大多数情况下。 (我之前解决这个问题的方法是将传入的数据复制到“最新的读物”存储中,并以正常的方式将其写入数据库。这使得如果您只想要访问它,访问非常快最新的阅读。)

+0

这有帮助。谢谢@Lorna – jimish