4

todolist のデータベースがあり、重要でまだ完了していないすべてのアイテムをクエリしたいとします。SQLでは、次のようなものを使用します

SELECT * FROM todolist WHERE important = true AND state <> 'done'

indexeddb nosql データベースでそのタイプのリクエストを実行するにはどうすればよいでしょうか? インデックス付き?別の方法?ありえない?

私が知っているように、結果をフィルタリングするimportant = true

objectstore.index('important').openCursor(IDBKeyRange.only('true'))

state <> 'done'しかし、しか得られなかったので、フィルタリングする方法がわかりませんIDBKeyRange.only(z)

そして、両方の句をフィルタリングする方法がわかりません。

NB : MongoDB では、次のことを行います。

db.userdetails.find({"date_of_join" : "16/10/2010","education":"M.C.A."})
4

3 に答える 3

6

onupgradeneeded で、配列を使用する基準にインデックスを作成します。

todolistStore.createIndex('importantIncomplete', ['important','state'],{unique:false});

あなたのクエリのために:

var lowerBound = ['true','started'];
var upperBound = ['true','almostdone'];
var range = IDBKeyRange.bound(lowerBound,upperBound);
var request = todolistStore.index('importantIncomplete').openCursor(range);
于 2013-03-25T21:58:12.667 に答える
1

IndexedDB で複数のインデックスをクエリするには、2 つの方法があります。Josh は、複合インデックスを使用して複数のフィールドをクエリする最速の方法について説明しました。ただし、ストレージのコストがかかり、書き込みが遅くなります。さらに、クエリはアプリオリに知られている必要があるため、必要に応じてインデックスが作成されます。2 番目の方法は、並べ替えられたマージまたはその他のアルゴリズムを使用した手動のキー結合です。この方法では、関心のあるフィールドにインデックス (複合ではない) が必要であり、すべての組み合わせクエリを実行します。ydn -db ライブラリでのソート済みマージ、ネストされたループ、およびジグザグ マージの実装については、 http://dev.yathit.com/ydn-db/nosql-query.htmlを参照してください。キー結合アルゴリズムをさらに追加するために出席します。

ところで、通常、ブール値のインデックスは作成しません。クエリ フィールドがブール データ型の場合は、テーブル スキャンを実行するだけです。インデックスを使用する点ではありません。

于 2013-03-26T05:05:06.323 に答える
-4

そのためにはインデックスが必要であり、1 つのフィルターを提供できるカーソルを使用してデータを取得できます。

私のブログ ( http://www.kristofdegrave.be/2012/01/indexed-db-reading-multiple-records.html?m=1 ) で、それに関する詳細情報を見つけることができます。

于 2012-11-22T18:55:16.880 に答える