如何创建一个从一组设备返回最后十个文档的视图?

时间:2016-08-26 14:23:36

标签: couchdb

是否可以创建一个接收一组deviceID的视图,并从每个文档中返回最后10个文档?

文件采用以下格式:

{
  "_id": "002b8ba94519abc038624601d718b967",
  "_rev": "1-6727616a5c51d5d271eb7458dbe8249c",
  "lat": -21.59941,
  "bl": 100,
  "ic": 1,
  "ax": -0.47,
  "ay": -0.59,
  "ch": 920,
  "t": 300.25,
  "lng": -48.370622,
  "timestamp": 1471454475140,
  "deviceID": "device1"
}

我需要按时间戳排序最后10个文档才能在仪表板中呈现图形

我的想法是使用数组作为键参数执行GET请求:

/遥测/ _design /名称/ _view / getLast10Docs?键= [ “DEVICE1”, “设备2”, “设备3”]

它应该返回类似的内容:

{
  "device1": [ last 10 docs here],
  "device2": [ last 10 docs here],
  "device1": [ last 10 docs here]
}

是否可以在一个视图中一次完成所有操作?或者我应该分别对阵列中的每个deviceID进行查询?

1 个答案:

答案 0 :(得分:0)

不幸的是,我不认为这是可能的。您可以按设备和时间戳对它们进行分组,但要获得最后一个,您需要将10的限制应用于某个不可能的参数。

最好的方法是在 deviceId 时间戳上执行地图功能。从那里,您可以使用grouplevel=1对此视图进行查询,以获取所有可用设备。然后,对于每个设备,使用?key['deviceId']&limit=10&descending=true查询此地图。这将获得与此deviceId关联的10个文档,其中包含最高时间戳(最新)。

如果提出过多的网络请求对您来说不是一个好的解决方案,您也可以获取整个结果并在客户端处理数据,但我不建议这样做。