如何创建 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 的限制,这是不可能的。
最好的方法是在 deviceId 和 timestamp 上执行映射功能。从那里,您可以使用 grouplevel=1
对此视图进行查询以获取所有可用设备。然后,对于每个设备,使用 ?key['deviceId']&limit=10&descending=true
查询此地图。这将获取与此 deviceId 关联的具有最高时间戳(最近)的 10 个文档。
如果网络请求太多对你来说不是一个好的解决方案,你也可以获取整个结果并在客户端处理数据,但我不推荐这样做。
是否可以创建一个视图来接收一组设备 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 的限制,这是不可能的。
最好的方法是在 deviceId 和 timestamp 上执行映射功能。从那里,您可以使用 grouplevel=1
对此视图进行查询以获取所有可用设备。然后,对于每个设备,使用 ?key['deviceId']&limit=10&descending=true
查询此地图。这将获取与此 deviceId 关联的具有最高时间戳(最近)的 10 个文档。
如果网络请求太多对你来说不是一个好的解决方案,你也可以获取整个结果并在客户端处理数据,但我不推荐这样做。