2017-01-30 22 views
0

誰かがIndexedDBオブジェクトストアから複数のキー値を取得する方法を提案できますか?私は複数の選択肢を行ってきましたが、何もしませんでした。 はここIndexedDbオブジェクトストアから複数のキー値を取得する方法

$provide.value('dbModel', { 
     name: 'TestDB', 
     version: '1', 
     instance: {}, 
     objectStoreName: { 
      dashboards: 'Appointment' 
     }, 
     upgrade: function (e) { 
      var db = e.target.result; 
      if (!db.objectStoreNames.contains('Appointment')) { 
       var calendarobj = db.createObjectStore('Appointment', { 
        keyPath: 'AppointmentId' 
       }); 
       calendarobj.createIndex("AppointmentId", "AppointmentId", { multiEntry: true }); 
      } 
     } 
    }); 

、データが

KeyPath-AppointmentId    Value 
=====================    ===== 
1         Test 1 
2         Test 2 
3         Test 3 

のように見える私はobjectstorenameインスタンスを取得するgetObjectStoreメソッドを持っているのIndexedDBを作成しました。

getObjectStore: function (objectStoreName, mode) { 
      var modeact = mode || _db.transactionTypes.readonly; 
      var txn = _db.instance.transaction(objectStoreName, modeact); 
      var store = txn.objectStore(objectStoreName); 

      return store; 
     } 


var keys = [1,2]; // Want to get the First two record which has value 'Test 1' and 'Test 2' 
var store = _db.getObjectStore(objectStoreName); 
var tagIndex = store.index(store.keyPath); //AppointmentId 

var request = tagIndex.openCursor(IDBKeyRange.only(keys)); 
//var request = tagIndex.get(keys); 

request.onsuccess = function (event) { 
       console.log(event.result); 
} 
+1

投票時にコメントを追加してください。私の質問を改善できるように – Pradeep

答えて

2

あなたは動作しませんそうであるように[1, 2]を使用して - それは二つの部材を持つ配列であることを起こるキーです。索引DBは、現在、照会のためにリストまたはキーのセットを使用することを理解していません。

あなたはオプションのほんの一握りを持っている:

1 - 問題2は、並列に要求を取得します。 (順序が保証されているので、2番目の要求は、最初の後に終了しますと、あなたは、両方の結果が返されています知っている。)

var results = []; 
store.get(1).onsuccess = function(e) { 
    results.push(e.target.result); 
}; 
store.get(2).onsuccess = function(e) { 
    results.push(e.target.result); 

    // results will have the values 
}; 

2 - カーソルおよび範囲を使用します

var results = []; 
store.openCursor(IDBKeyRange.bound(1, 2)).onsuccess = function(e) { 
    var cursor = e.target.result; 
    if (cursor) { 
    results.push(cursor.value); 
    cursor.continue(); 
    } else { 
    // results will have the values 
    } 
}; 

3範囲を使用するオプション2と3であなたものキーでレコードを取得することを

store.getAll(IDBKeyRange.bound(1, 2)).onsuccess = function(e) { 
    // e.target.result will have the entries 
}; 

注 - - 範囲での使用のgetAll(利用できない場合は戻って、カーソルにフォールのみ、新しいブラウザ)が存在する場合はそれがあります。

関連する問題