0

私はcouchDBデータベースを使用しています。

and a query likeすべてのドキュメントをカテゴリ別に取得し、["category","document_id"] startkey=["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 に答える