获取IndexedDB中添加记录的密钥

时间:2012-12-28 10:33:50

标签: javascript jquery indexeddb

我在IndexedDB中有这段代码:

var request = objectStore.add({ entryType: entryType, entryDate: t});

现在我想知道刚添加的这条记录的关键。我该怎么做?

我找到了this article,而且这个 代码:

var data = {"bookName" : "Name", "price" : 100, "rating":"good"};
var request = objectStore.add(data);
request.onsuccess = function(event){
    document.write("Saved with id ", event.result)
    var key = event.result;
};

这对我不起作用 - 键显示为未定义。我想我错过了一些基本的东西!

4 个答案:

答案 0 :(得分:7)

浏览此代码

var data = {"bookName" : "Name", "price" : 100, "rating":"good"};
var request = objectStore.add(data);
request.onsuccess = function(event){
    document.write("Saved with id ", event.result)
    var key = event.target.result;
};

希望此代码能够检索最后插入的记录的密钥

答案 1 :(得分:4)

spec是为用户代理编写的,而不是为开发人员编写的。所以令人困惑。密钥生成器由用户代理提供。

event处理程序收到的任何onsuccess对象始终都有event.target.result。这是您正在寻找的关键。如果您不提供密钥,则会自动生成密钥,假设您将autoIncrement设置为true。

步骤8中的documented:如下:

  
      
  1. 此算法的结果很关键。
  2.   

答案 2 :(得分:0)

这里的诀窍是知道如何迭代地搜索短语,直到找到你需要的东西。我之前从未听说过IndexedDB,但似乎找到了你想要的东西。

我放"IndexedDB" into a search engine并找到了this。这产生了短语“密钥生成器”,因此我searched for that as well导致我thisthis

StackOverflow链接讨论了使用UUID,这当然可以用JavaScript生成,最后一个链接似乎有一些示例可以开箱即用。

答案 3 :(得分:0)

如果您为 IndexedDB 使用 idb Promise 包装器,那么新键就是 add() 调用的返回值:

import { openDB } from 'idb';

const db = await openDB(...);
const tx = db.transaction('mystore', 'readwrite');
const newId = await tx.store.add({ hello: 'world' });
await tx.done;

console.log(`Autogenerated unique key for new object is ${newId}`);

当然要记住,这只有在传递给 autoIncrement: true 的选项中包含 createObjectStore() 时才有效。