我正在使用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"
答案 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)
这种方式按字典顺序(升序)排序的结果将根据您的需要订购: