gpt4 book ai didi

javascript - 在 IndexedDB 中的对象中索引数组值

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:43:03 26 4
gpt4 key购买 nike

对于将数据存储在 IndexedDB 中的 Chrome 应用程序,我有一个这样的对象:

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”的索引,它可以在每个 order 对象中多次包含吗?

或者是否需要或者可能更好/更快地将每个对象拆分为多个对象存储,就像从关系数据库中知道的那样:

  • 订购
  • 订单项
  • 包裹

该解决方案还应该能够快速处理 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 - 在 IndexedDB 中的对象中索引数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36921561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com