如何创建 returns 来自一组设备的最后十个文档的视图?

How to create a view that returns the last ten documents from a set of devices?

是否可以创建一个视图来接收一组设备 ID 和 return每个设备的最后 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 请求:

/telemetry/_design/name/_view/getLast10Docs?keys=["device1","device2","device3"]

它应该return类似于:

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

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

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

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

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