Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IndexedDB中使用组合键的部分查询_Javascript_Indexeddb_Composite Primary Key - Fatal编程技术网

Javascript IndexedDB中使用组合键的部分查询

Javascript IndexedDB中使用组合键的部分查询,javascript,indexeddb,composite-primary-key,Javascript,Indexeddb,Composite Primary Key,考虑一下,我有一个带有复合键的IndexedDB数据库,例如:[prop1,prop2] 如果只知道密钥的一部分就可以从数据库返回多个记录,是否可以执行部分查询 这相当于以下SQL查询: 从prop1='foo'的表格中选择* 或: 从prop2='bar'的表格中选择* 我曾尝试使用getAll()方法,但它似乎期望键的两个部分都有值 如果不可能-可以考虑什么替代方案?我仍然不确定是否可以对复合密钥进行部分查询,但是,我决定切换到不同的策略: 其思想是为存储使用自动生成的主键,然后为prop1

考虑一下,我有一个带有复合键的IndexedDB数据库,例如:
[prop1,prop2]

如果只知道密钥的一部分就可以从数据库返回多个记录,是否可以执行部分查询

这相当于以下SQL查询:

从prop1='foo'的表格中选择*

或:

从prop2='bar'的表格中选择*

我曾尝试使用
getAll()
方法,但它似乎期望键的两个部分都有值


如果不可能-可以考虑什么替代方案?

我仍然不确定是否可以对复合密钥进行部分查询,但是,我决定切换到不同的策略:

其思想是为存储使用自动生成的主键,然后为
prop1
prop2
创建两个单独的索引。这样,您可以分别查询这两个属性。这非常适合我的用例:

//示例使用npm中的“idb”包
const store=database.createObjectStore('resources'{
密钥路径:“id”,
自动递增:真,
});
createIndex('url','url');
createIndex('hash','hash');

但是,我认为,如果需要一些唯一性保证,还可以使用两个附加索引和复合主键。这可能比直接使用主键的索引效果要差。

是的,您可以进行部分查询,因为您可以比较不同长度的数组。但结果不会很好。基本上,您可以将复合数组的第一个元素重新用作它自己的索引。但是,第二个元素上未定义的结果也可能不存在


通过使用类似于
[prop1value]
的查询值,您可以为
prop1
轻松地执行此操作。但是,对于
prop2

来说,您不能简单地执行此操作,这可能是最好的方法。不能简单地对复合键的一部分执行查询。您可以得到的最接近的结果是迭代光标并前进。类似的例子