编程语言
首页 > 编程语言> > javascript – 索引IndexedDB中对象的数组值

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