ここには、CouchDBを使用したページ付けに関連する質問がたくさんありますが、私が疑問に思っていることに完全に一致するものはありません。
基本的に、投票数でランク付けされた結果セットがあり、セットを降順でページングしたいと思います。
map
参考までにこちらをご覧ください。
function(doc) {
emit(doc.votes);
}
さて、問題。startkey_docid
それだけではうまくいかないことがわかりました。と組み合わせて使用する必要がありますstartkey
。重要なのは、クエリではstartkey
パラメーターを使用しないことです(結果を制限するつもりはなく、最大->最小を取得するだけです)。代わりにstartkey={{doc.votes}}&startkey_docid = {{doc._id}}を使用できると思っていましたが、誰かが[次のページ]リンクをクリックするまでに、ドキュメントの投票数が変わった可能性があります。
これを解決する方法は明らかなようでした。startkey=99999999
データベース内のすべてのドキュメントが返されるように設定するだけstartkey_docid
で、前回中断したドキュメントから開始できます。奇妙なことに、私がそれを行うと、startkey_docid
動作が停止し、すべての結果が再び返されるようになりました。どうやらで使用されstartkey
ているドキュメントのキーと正確に等しい必要があります。_id
startkey_docid
私が質問しているのは、実際に使用したい時間までにstartkey_docid
実際のページが変更された可能性があるときに、ページに使用するための回避策を誰かが知っているかどうかです。startkey
私のアプリケーションは、ドキュメントを検索し、リクエスト間の数ミリ秒で変更されていないことを期待して_id
、すぐに値を使用する必要がありますか?doc.votes
それでもあまり信頼できないようです。
編集:速度のためにMongoに切り替えることになったので、この質問はちょっと議論の余地があることがわかりました。