如何创建 indexeddb 复合键
How to create an indexeddb composite key
我花了好几个小时搜索这个,只是通过反复试验,我终于找到了解决方案。将此记录在 Stack Overflow 中以供将来的搜索者使用。
问:
如何在 indexeddb 中创建复合键?
使用以下方法在对象存储的 indexeddb 中创建键:
var db;
var openRequest = indexedDB.open('myDB', 1);
openRequest.addEventListener('error', () => {
console.error('Unable to open db');
});
openRequest.addEventListener('upgradeneeded', function(event){
var store = db.createObjectStore('myStore',
{keyPath: /* composite key */ }
);
});
openRequest.addEventListener('success', function(){
db = openRequest.result;
});
我试过多次放置对象,定义,如何创建复合键,或者这是API的限制?
注意:如果您正在寻找如何使用范围查询复合键,请查看this post
A:
事实证明,答案很简单,但在我看过的任何地方都没有很好的记录,乍一看并不明显。使用字符串数组...
var store = db.createObjectStore('myStore',
{keyPath: ['id1', 'id2']}
);
也可以用同样的方式创建复合索引。
对于复合键数据,
补充一点,实际使用复合键,也不是很清楚。
添加对象还不错:
myStore.add({
id1: 'a', // first part of key
id2: 'b', // second part of key
etc: 'c', // other data to store
});
然而,使用复合键再次获取对象并不是那么明显。您需要传递一个数组作为键,值的顺序与最初传递给 createObjectStore()
.
的 keyPath
数组的顺序相同
myStore.get(['a', 'b']) // look for id1=a + id2=b
在这里,数组中的第一个值 (a
) 与 keyPath[0]
匹配,在上面的答案中设置为 id1
.
我花了好几个小时搜索这个,只是通过反复试验,我终于找到了解决方案。将此记录在 Stack Overflow 中以供将来的搜索者使用。
问:
如何在 indexeddb 中创建复合键?
使用以下方法在对象存储的 indexeddb 中创建键:
var db;
var openRequest = indexedDB.open('myDB', 1);
openRequest.addEventListener('error', () => {
console.error('Unable to open db');
});
openRequest.addEventListener('upgradeneeded', function(event){
var store = db.createObjectStore('myStore',
{keyPath: /* composite key */ }
);
});
openRequest.addEventListener('success', function(){
db = openRequest.result;
});
我试过多次放置对象,定义,如何创建复合键,或者这是API的限制?
注意:如果您正在寻找如何使用范围查询复合键,请查看this post
A:
事实证明,答案很简单,但在我看过的任何地方都没有很好的记录,乍一看并不明显。使用字符串数组...
var store = db.createObjectStore('myStore',
{keyPath: ['id1', 'id2']}
);
也可以用同样的方式创建复合索引。
对于复合键数据,
补充一点,实际使用复合键,也不是很清楚。
添加对象还不错:
myStore.add({
id1: 'a', // first part of key
id2: 'b', // second part of key
etc: 'c', // other data to store
});
然而,使用复合键再次获取对象并不是那么明显。您需要传递一个数组作为键,值的顺序与最初传递给 createObjectStore()
.
keyPath
数组的顺序相同
myStore.get(['a', 'b']) // look for id1=a + id2=b
在这里,数组中的第一个值 (a
) 与 keyPath[0]
匹配,在上面的答案中设置为 id1
.