是否可以创建一个接收一组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进行查询?
答案 0 :(得分:0)
不幸的是,我不认为这是可能的。您可以按设备和时间戳对它们进行分组,但要获得最后一个,您需要将10的限制应用于某个不可能的参数。
最好的方法是在 deviceId 和时间戳上执行地图功能。从那里,您可以使用grouplevel=1
对此视图进行查询,以获取所有可用设备。然后,对于每个设备,使用?key['deviceId']&limit=10&descending=true
查询此地图。这将获得与此deviceId关联的10个文档,其中包含最高时间戳(最新)。
如果提出过多的网络请求对您来说不是一个好的解决方案,您也可以获取整个结果并在客户端处理数据,但我不建议这样做。