2012-12-28 49 views
0

我正在使用couchDB数据库。CouchDB视图排序按日期排序

我可以按类别的所有文档,并与像[ “类别”, “DOCUMENT_ID”] and a query like startkey的关键拼版结果= [ “类别”, “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

开始发射类别和时间戳(你不需要DOCUMENT_ID):

emit(category, timestamp); 

,然后在类别筛选:

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

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

最后但并非最不重要的是,不要忘记有足够的时间戳表示。

+0

如何在没有文档ID的情况下对分页结果进行分页? – MiniScalope

+1

您可以使用'skip'和'limit' [查询参数]进行分页(http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options) –

+0

我首先使用了ID,因为它被称为无处不在,skip函数非常效率低下,不推荐。 – MiniScalope

0

带时间戳而不是doc ID的分页问题是时间戳不是唯一的。这就是为什么您在分页Aurélien解决方案时遇到问题。

我会留在你的尝试,但使用时间戳作为数字(自1970年以来的标准UNIX毫秒)。您只需通过-1乘以反向单数字字段的顺序:

emit(category, -timestamp, doc_id) 

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

  1. 第一次约会下降,
  2. 然后文件ID的升序。