0

我正在使用一个 couchDB 数据库。

我可以按类别获取所有文档,并使用 ["category","document_id"] and a query likestartkey=["category","document_id"]&endkey=["category",{}]` 之类的键对结果进行分页

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

我尝试了很多键,例如["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"

4

2 回答 2

0

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

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

emit(category, -timestamp, doc_id)

这种按字典顺序(升序)排序的结果将根据您的需要进行排序:

  1. 第一次约会降序,
  2. 然后文档 id 升序。
于 2012-12-29T11:41:26.447 回答
0

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

emit(category, timestamp);

然后过滤类别:

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

你必须明白这只是一种排序,所以你需要startkey在第一行之前,endkey在最后一行之后。

最后但并非最不重要的一点是,不要忘记有一个足以满足排序要求的时间戳表示。

于 2012-12-28T19:45:40.417 回答