5

タイムスタンプに基づいてデータを取り戻す方法を見つけようとしています。基本的に、タイムスタンプ フィールドに基づいて 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 に渡すことでした。

4

2 に答える 2