2017-11-10 15 views
1

私は、私のFirefox WebExtensionを構築するためにindexedDBに慣れ親しんでいます。配列キーパスのインデックスが値を見つけません

私のサンプルデータは、次のように構成されています

const sampleDataRaw = [ 
     { 
     "ent_seq" : 1413190, 
     "att1" : [ { 
     "sub11" : "content1", 
     "sub12" : [ "word" ] 
     }, { 
     "sub11" : "content2" 
     } ], 
     "att2" : [ { 
     "sub21" : "other content", 
     "sub22" : [ "term" ] 
     } ] 
    }, { 
     "ent_seq" : 1000010, 
     "att2" : [ { 
     "sub21" : "more content" 
     }, { 
     "sub22" : "more words" 
     } ] 
    } 
    ] // end sampleRawData 

は、私は、私のデータベースを作成し、このサンプルデータを追加し、objectStore.get()とObjectStoreのを使用してent_seqキーでそれを照会/オープニング限りです。 openCursor()。

objectStore.createIndex("sub11Elements", "att1.sub11", { unique: false }); 
objectStore.createIndex("sub21Elements", "att2.sub21", { unique: false }); 

私が検索したい場合は、たとえば、フィールドsub11としてここに:私はこののようにこれらのために作成しておく必要があり、インデックスを使用してsub11かsub21フィールドを検索したい場合

問題が発生します:

var index = objectStore.index("sub11Elements"); 
index.get("content1").onsuccess = function(event) { 
     // I should have the first object of my data now, alas the result is undefined instead 
    }; 

確かに成功しますが、get()は実際に何も見つからなかったので、戻り値は未定義です。

なぜエントリが見つからないのか、それを見つける方法を知りたいのですが。私はキーパスが間違っていると考えましたが、キー(ent_seq)で検索するとresult.att1 [i] .sub11値を正常に取得できます。

mozillaのウェブサイトでは、キーは文字列と配列(または配列内の配列など)であり、キーパス部分はドットを使用して連結されていると言われています。 stackexchangeで検索してみたところ、私はこれまでkeypathの中に可変キーを持つことはできないが、ここではそうではないはずです。
したがって、私は本当に何が原因でデータベース内のオブジェクトが見つからないようになっているのか分かりません。

+0

私はobjectStore.createIndex( "sub11Elements"、 "att1.sub11"、{unique:false});の問題は、 'att1'はオブジェクトではない配列だと思います。 'att1 [0] .sub11'を試してみてください – VTodorov

答えて

2
  1. 第2レベルのオブジェクトは配列であり、第1レベルのオブジェクトのプロパティではないようです。 .アクセサはサブプロパティにアクセスし、配列のインデックスにはアクセスしません。
  2. IDBObjectStore.prototype.getは、エラーがなければ常に成功し、一致するものが見つかったかどうかを示していません。

さらに1点目。"att1":[{"sub11" : "content1","sub12" : [ "word" ]}...をご覧ください。これが実際の基本的なJavaScriptオブジェクトであるとふりまとめてください。 att1.sub11を使用できますか?いいえ。att1の値がの配列であるため、オブジェクトではありません。

関連する問題