2015-02-09 110 views
0

我已經看過,看起來無處不在,但IndexedDb並不是非常有名。我有一個對象存儲稱爲訂單,每個訂單的結構就像一個自動生成的密鑰:Indexeddb搜索具有特定字段的所有訂單

{"dealername":"something","dealerid":num,"totalbill":num,"items":[{},{}]} 

現在作爲對象存儲的訂單可以有相同的dealerid多個訂單,我怎麼能得到所有訂單與特定dealerid?

不過,對於noob問題,我來自SQL背景。 謝謝

回答

1
  1. 創建索引dealerid。
  2. 在dealerid索引上打開遊標並進行迭代。

下面是一些非常簡單的代碼,讓您開始:

function onUpgradeNeeded(event) { 
    var db = event.target.result; 

    var orderStore = db.createObjectStore('orders', ...); 

    // Create the index on dealerid here 
    orderStore.createIndex('dealeridindex', 'dealerid'); 
} 

function queryOrdersByDealerID(db, id, onOrder, onComplete) { 
    var tx = db.transaction('orders'); 
    tx.onComplete = onComplete; 
    var orders = tx.objectStore('orders'); 
    var index = orders.index('dealeridindex'); 
    var request = index.openCursor(id); 
    // You could also do this, if you wanted, it is identical: 
    // var request = index.openCursor(IDBKeyRange.only(id)); 

    request.onsuccess = function(event) { 
    var cursor = event.target.result; 
    if(!cursor) return; 
    onOrder(cursor.value); 
    cursor.continue(); 
    }; 
} 

// Now to use it: 
var openRequest = indexedDB.open('dbname', version); 

// Attach our upgrade handler that gets called when higher version found 
openRequest.onupgradeneeded = onUpgradeNeeded; 

// Now do a query 
openRequest.onsuccess = function(event) { 
    // event.target === openRequest === this 
    // use whatever you prefer, e.g. this.result or openRequest.result 
    var openDatabaseConnection = event.target.result; 

    var someId = 5; 

    function handleOrder(order){ 
    console.log('Order %o', order); 
    } 

    function whenAllMatchingOrdersIterated(event) { 
    console.log('Finished iterating over orders'); 
    } 

    // 'execute' the query 
    queryOrdersByDealerID(openDatabaseConnection, someId, 
    handleOrder, whenAllMatchingOrdersIterated); 
}