在indexeddb中按索引搜索

时间:2014-07-08 14:59:59

标签: jquery indexeddb

我正在使用此插件:https://github.com/axemclion/jquery-indexeddb/tree/gh-pages 我想使用索引,但我不能理解get方法如何在索引上工作。我的想法是按给定的索引搜索,例如$ .indexedDB(" OfflineDB")。objectStore(" users")。index(" userName")。get("我的用户名" ) 所以我想为名为"我的用户名"的用户找到数据。直接,我不想迭代所有存储的对象,因为它太慢了。 我有什么想法可以让它发挥作用吗?

2 个答案:

答案 0 :(得分:0)

对索引使用get方法不会迭代对象库中的所有存储对象。查看此包装器的source code,get方法只包含正常的IDBIndex.get方法。根据{{​​3}},“[ID] IDBIndex.get方法...找到...引用的对象库中与给定键对应的值...”根据MDB documentation ,IDBIndex.get跟随indexedDB spec。这主要涉及以下步骤:“如果key不是键范围,则从索引中找到带键键的第一个记录。如果key是键范围,则从键中键入键的索引中找到第一个记录。”

按键检索对象不涉及显式迭代。它类似于使用散列映射来获取密钥的值。它类似于通过指定索引来查找数组中的值。

例如,它基本上是这样做的:

var data = {"My user name": user1, "other username": user2, 
      "another username": user3};

function lookupValueForKey(username, index) {
  return index[username];
}

var user = lookupValueforKey("My user name", data);

这样做:

function lookupValueForKey(username, index) {
  for(var key in index) {
    if(key == username) {
       return index[key];
    }
  }
}

因为这会破坏使用索引的整个目的。这甚至没有意义。

答案 1 :(得分:0)

var index = store.index("name");

                var request = index.get("frstname");
                request.onsuccess = function () {
                    var matching = request.result;
                    if (matching !== undefined) {
                        // A match was found.
                        report(matching.isbn, matching.title, matching.author);
                    } else {
                        // No match was found.
                        report(null);
                    }
                };