按日期排序的CouchDB视图排序规则

时间:2012-12-28 18:47:15

标签: couchdb

我正在使用couchDB数据库。

我可以按类别和分页结果获取所有文档,例如["类别"," document_id"] and a query like startkey = [" category&# 34;," DOCUMENT_ID"&安培; endkey = ["类别",{}]`

现在我想按日期对这些结果进行排序,以便先获得最新文档。

我尝试了许多密钥,例如["category","date","document_id"] 但没有任何作用(或者我无法使其发挥作用)。

我会用类似的东西 startkey=["queried_category","queried_date","queried_document_id"]&endkey=["queried_category"]

但忽略" queried_date"关键部分(排序但不要将文档放在" document_id">" queried_document_id")

编辑: 示例: 用一把钥匙: startkey=["apple","2012-12-27","ZZZ"]&endkey=["apple",{}]&descending=true

我会(并且这是正常行为)

"apple","2012-12-27","ABC"
"apple","2012-05-01","EFG"
 ...
"apple","2012-02-13","ZZZ"
...

但我想要的结果集应该从一开始 "apple","2012-02-13","ZZZ"

2 个答案:

答案 0 :(得分:0)

发出类别和时间戳(您不需要document_id):

emit(category, timestamp);

然后过滤类别:

?startkey=[":category"]&endkey=[":category",{}]

您必须明白这只是一种排序,因此您需要startkey位于第一行之前,endkey位于最后一行之后。

最后但同样重要的是,不要忘记为时间戳的表示提供足够的排序。

答案 1 :(得分:0)

使用时间戳而不是文档ID分页的问题是时间戳不是唯一的。这就是为什么你会遇到分析Aurélien解决方案的问题。

我会继续你所尝试的但是使用时间戳作为数字(自1970年以来的标准UNIX毫秒)。您可以通过乘以-1来反转单个数字字段的顺序:

emit(category, -timestamp, doc_id)

这种方式按字典顺序(升序)排序的结果将根据您的需要订购:

  1. 第一个日期降序,
  2. 然后记录id的升序。