タイムスタンプに基づいてデータを取り戻す方法を見つけようとしています。基本的に、タイムスタンプ フィールドに基づいて 100 個のドキュメントをクエリしたいと考えています。100 個のドキュメントは、渡したタイムスタンプよりも古いはずです。また、タイムスタンプを渡すことができるリフレッシュを作成し、100 個の新しいドキュメントを取得したいと考えています。ここでは明らかにロジックが異なりますが、Couchbase でこれを実現する方法を理解するのは困難です。
これが私がこれまでに持っているものです:
私の見解では、ご覧のとおり、日付だけでなく可視性フィールドもチェックしているため、複雑なキーも使用する必要があります。ビューの縮小部分には何もありません。
function (doc, meta)
{
if(meta.type == "json" && doc.type == "POST" && doc.created != null)
{
emit([dateToArray(doc.created), doc.visibility], null);
}
}
Java クライアントを使用してクエリを実行しています。テスト用に制限を 2 に設定しています。ここで奇妙なのは、何かを取得するには setDescending を false にする必要があることです。また、どの日付を渡しても、常に結果が得られます。期待される動作として私が望むのは、日付を渡し、その日付と同じかそれより古い結果のみを取得することです。
View view = client.getView("dev_posts", "post_list");
ComplexKey keys = ComplexKey.of(DataConstants.getDateAsArray(startDate), postType);
Query query = new Query();
query.setRangeStart(keys);
query.setIncludeDocs(true);
query.setLimit(2);
query.setDescending(false);
ViewResponse response = client.query(view, query);
編集:
基本的に私が Couchbase に求めているのは、Facebook や Pintrest などのモバイル アプリに似ています。ユーザーが更新したときの特定のタイムスタンプで、より新しいものを取得したいと考えています。ユーザーがスクロールしているとき、特定の日付を過ぎて次のグループを取得したい。
** アップデート **
これで解決しましたが、さらに調査を進めます。ComplexKey は、日付配列を [2013,11,8,20,0,0] のままにするのではなく、"[2013,11,8,20,0,0]" に変換しています。さらに調査する予定です。当面の回避策は、ComplexKey を使用するのではなく、独自の複雑なキーを作成し、それを単なるキーとして startKey に渡すことでした。