javascript – 索引IndexedDB中对象的数组值
作者:互联网
对于Chrome应用程序,我将数据存储在IndexedDB中,我有一个这样的对象:
var simplifiedOrderObject = {
"ordernumber": "123-12345-234",
"name": "Mr. Sample",
"address": "Foostreet 12, 12345 Bar York",
"orderitems": [
{
"item": "brush",
"price": "2.00"
},
{
"item": "phone",
"price": "30.90"
}
],
"parcels": [
{
"service": "DHL",
"track": "12345"
},
{
"service": "UPS",
"track": "3254231514"
}
]
}
如果我将hole对象存储在objectStore中,我可以使用“track”索引,它可以在每个订单对象中多次包含吗?
或者是否需要或者可能更好/更快将每个对象拆分成多个objectStore,例如来自关系数据库的知识:
>订单
> orderitem
>包裹
该解决方案还应以快速方式工作,存储100,000个或更多对象.
解决方法:
回答我自己的问题:我现在做了一些测试.看起来只能在1个objectStore中对该对象执行此操作.
另一个可行的示例对象:
var myObject = {
"ordernumber": "123-12345-234",
"name": "Mr. Sample",
"shipping": {"method": "letter",
"company": "Deutsche Post AG" }
}
Creating an index将通过以下方式完成:
objectStore.createIndex(objectIndexName, objectKeypath, optionalObjectParameters);
通过设置objectKeypath,可以在主对象中寻址一个值,如“name”:
objectStore.createIndex("name", "name", {unique: false});
也可以从像“shipping.method”这样的对象的子对象中寻址一个值:
objectStore.createIndex("shipping", "shipping.method", {unique: false});
但是,无法处理存储在数组中的包含在对象中的“track”之类的值.甚至像“parcels [0] .track”之类的东西来获取第一个值作为索引也行不通.
无论如何,有可能索引数组的所有简单元素(但不是对象).
因此,以下更简单的结构将允许为“trackingNumbers”数组中的每个parcelnumber创建索引条目:
var simplifiedOrderObject = {
"ordernumber": "123-12345-234",
"name": "Mr. Sample",
"address": "Foostreet 12, 12345 Bar York",
"orderitems": [
{
"item": "brush",
"price": "2.00"
},
{
"item": "phone",
"price": "30.90"
}
],
"trackingNumbers": ["12345", "3254231514"]
}
在创建索引时将multiEntry设置为true:
objectStore.createIndex("tracking", "trackingNumbers", {unique: false, multiEntry: true});
无论如何,缺少在数组中索引对象值的可能性,使得使用indexedDB确实不需要复杂.这是设计上的失败.这迫使开发人员在关系数据库中执行操作,同时缺少SQL的所有可能性.特别糟糕 :(
标签:javascript,google-chrome,indexeddb,google-chrome-app 来源: https://codeday.me/bug/20190623/1269254.html