【问题标题】:get unique id from indexeddb index从 indexeddb 索引中获取唯一 ID
【发布时间】:2014-05-12 00:58:15
【问题描述】:

在索引数据库中我有以下记录

Key               Value
emp_1             { emp_fName : "Mike",
                    emp_lName : "Davis",
                    dept_id   : 1
                  }

emp_2             { emp_fName : "Merry",
                    emp_lName : "Bond",
                    dept_id   : 1
                  }

我已经在 dept_id 上创建了索引,我想获取唯一的 dept_id,我该怎么做?

【问题讨论】:

  • 您好用户 780611!感谢您提出 IDB 标记问题。我看到你还没有接受你提出的问题的任何答案,但有足够的业力。 meta.stackoverflow.com/help/someone-answers 如果您的需求在下面得到满足,我一定会很感激“正确”的答案。

标签: indexeddb


【解决方案1】:

您需要在 IDBIndex 对象上使用 openCursor()openKeyCursor() 在索引上创建 cursor。来自the spec的例子:

var tx = db.transaction("books", "readonly");
var store = tx.objectStore("books");
var index = store.index("by_author");

var request = index.openCursor(IDBKeyRange.only("Fred"));
request.onsuccess = function() {
  var cursor = request.result;
  if (cursor) {
    // Called for each matching record.
    report(cursor.value.isbn, cursor.value.title, cursor.value.author);
    cursor.continue();
  } else {
    // No more matching records.
    report(null);
  }
};

您要设置为IDBCursorDirection 的特定标志是nextunique(相对于默认值next),它“不应该产生具有相同键的记录,而是产生所有记录,在键的顺序单调递增。”

【讨论】:

  • 这意味着我们必须对结果集进行处理。从索引数据库中,我们无法直接获取唯一 ID。这是真的吗?
  • 确实可以直接获取密钥,可以使用所谓的“主键”(始终存在)或附加索引。我们称它为“精确键光标”,它仍然是光标,因为您可能在同一个键下有多个条目。查看getKey()get() 方法。 Here's an example from my library that handles all cases.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多