我对NoSQL这个时髦的东西很感到困惑,尤其是Bluemix的CloudantDB。如您所知,此DB不按时间顺序存储值。程序员的任务是对条目进行排序,以防他想要数据......好吧......进行排序。
我尝试实现的目的是简单地让最后一个让我们说传感器已经以ORDERED方式发送给Watson IoT(它以连接的CloudantDB保存所有内容)的100个值。最后,将它们显示在D3.css样式的图形中会很好,但这是另一项任务。我首先需要有序数组中的值。
到目前为止我尝试过:我使用curl通过PHP从https://averylongID-bluemix.cloudant.com/iotp_orgID_iotdb_2018-01-25/_all_docs?limit=20&include_docs=true'获取数据;
我得到的是一个包含随机时间戳的20行条目的未排序数组。 DB中的最后20个条目。但不是时间戳。
我现在的问题是:你知道如何获得“最后”的20个条目吗?按时间戳排序?我做了一个带有JSON字符串的POST请求,我希望数据按时间戳排序,但这不起作用,可能是因为ISO时间戳字符串。
我是否真的必须编写一个javascript或PHP脚本来获取所有数据库条目,然后通过解析时间戳,再次排序数组然后获取(现在真正的)最后一个条目来查找20或100个最后条目?我简直不敢相信。
非常感谢提前!
答案 0 :(得分:2)
我终于找到了如何以一种有序的方式获取数据。关键是将_design api与_view api一起使用。
所以带有以下URL /属性和查询字符串的curl请求完成了这项工作:
卷曲结果让我第一次(在时间上)120个条目。我只需要了解如何获得最后的条目,但这已经是一个非常好的结果。我现在可以将数据传递到一个漂亮的JS图表并显示它。
答案 1 :(得分:1)
一个选项可能是将时间戳作为ID的一部分。 _all_docs查询按id。
按顺序返回文档如果该方法不适合您,您可以考虑根据时间戳字段创建二级索引。一种索引是Cloudant Query:
Cloudant查询允许您指定排序参数:
另一种可能对您有用的方法是_changes api:
更改API允许您在数据库中接收连续的更改源。例如,您可以将这些更改提供给D3图表。