1

複合キーで IndexedDB カウント メソッドを使用する方法で? 単一の属性をフィルタリングする方法を学びました。ここまでは順調ですが、今度は並べ替えとフィルター処理を同時に行う必要があります。

私のオブジェクト ストアは、次のオブジェクトで満たされています。

os.put({feed_id:1,id:1,title:"foofoo",time:111});
os.put({feed_id:1,id:2,title:"foobar",time:112});
os.put({feed_id:1,id:3,title:"foobaz",time:113});
os.put({feed_id:3,id:1,title:"bazfoo",time:114});
os.put({feed_id:3,id:2,title:"bazbar",time:115});
os.put({feed_id:3,id:3,title:"bazbaz",time:116});
os.put({feed_id:1,id:4,title:"foofoo",time:122});
os.put({feed_id:1,id:5,title:"foobar",time:121});
os.put({feed_id:1,id:6,title:"foobaz",time:120});
os.put({feed_id:3,id:4,title:"bazfoo",time:119});
os.put({feed_id:3,id:5,title:"bazbar",time:118});
os.put({feed_id:3,id:6,title:"bazbaz",time:117});

オブジェクト ストアに 2 つのインデックスを設定しました。1 つ (idx_feedid) には keyPath があり、openCursorfeed_idを使用して特定のフィード ID を持つすべてのオブジェクトを取得できます。もう 1 つ (idx_ts) には keyPath があり["id","feed_id","time"]ます。

問題は、idx_feedid の結果を反復すると、タイムスタンプで順序付けせずに結果が得られることです。SQL では簡単に を実行できますがSELECT * FROM feeditems WHERE feed_id=3 ORDER BY time DESC、IndexedDB ではどうすればよいのでしょうか?

ページネーションを実現するために返される結果を制限するにはどうすればよいですか? 本質的には、MySQL のようなものが必要ですLIMIT 0,10/ LIMIT 10,10/...

4

2 に答える 2

0

制限を行うことはできません。あなたがしようとしても、内部実装はあなたが制御できない最適化を使用します。たとえば、最初の 100 行のみが必要な場合でも常に RAM にロードするなどです。はまだかなり速いです。

問題については、https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore?redirectlocale=en-US&redirectslug=IndexedDB%2FIDBObjectStore#openCursor()をご覧ください。フィード ID 3 に IDBKeyRange を設定し、'prev' のような方向に渡して降順で反復します。

編集: ページネーションを行うには、cursor.advance(+ or - n rows) を使用します

于 2013-10-31T21:41:06.503 に答える