Wal*_*r M 4 javascript html5 indexeddb
我来自MySQL,已经习惯了常规的数据库表方案。我在理解IndexedDB及其某些术语时遇到了麻烦。我在文档中查询了这些定义:
关键字 一个数据值,通过该数据值可以在对象存储中组织和检索存储的值。
indexName 要创建的索引的名称。
keyPath 要使用的索引的密钥路径。
基本上,Key就像MySQL中的主键,对吗?是INDEXNAME同样的事情列?而且我不知道keyPath是什么。
有人可以为我解释这些吗?再次感谢您的耐心:)。
小智 6
是的,key
就像SQL中的主键一样。但其他人似乎缺少一个例子说明你的问题的主要部分,那就是区分indexName
和keyPath
。在Mozilla 创建索引页面中,
indexName 要创建的索引的名称。请注意,可以使用空名称创建索引。
keyPath 要使用的索引的密钥路径。请注意,可以使用空的keyPath创建索引,也可以将序列(数组)作为keyPath传递。
该indexName
是你使用访问索引内容。索引用于在数据库中搜索该“列”。的keyPath
是实际的名称“一栏。” 有关其他形式的信息,请参见其他问题和解答keyPath
。
请注意,“列”在技术上并不正确,但是我正在使用它,因为这就是您所使用的。
例如,假设您的数据包含该列,hours
并且您希望能够在该列上搜索数据库。创建数据库时,您将为该列创建索引:
objectStore.createIndex(indexName, keyPath, { unique: false });
Run Code Online (Sandbox Code Playgroud)
indexName
您想要的任何内容都可以在哪里,例如hoursColumn,keyPath
可以是hours。
objectStore.createIndex("hoursColumn", "hours", { unique: false });
Run Code Online (Sandbox Code Playgroud)
unique: false
仅仅意味着其他数据行在小时内可能具有相同的值。
我可以将数据写入objectStore
如下:
db.transaction(storeName, "readwrite").objectStore(storeName).add({hours: 20, minutes: 30});
Run Code Online (Sandbox Code Playgroud)
因此,要在“ 小时 ”列中搜索数据,您可以编写:
var data = db.transaction(storeName).objectStore(storeName).index("hoursColumn").get(20)
Run Code Online (Sandbox Code Playgroud)
结果将是小时数 = 20 的第一行数据,例如{hours: 20, minutes: 30}
综上所述,indexName就是您要创建的要搜索的索引,而keyPath是要在其上搜索的存储数据的实际名称。
索引是一种使查询indexeddb数据库中的数据成为可能的方法。如您所知,对象存储在对象存储中。这些对象库没有像普通SQL数据库中那样的架构。
存在以下3个重要属性的索引:
indexName:indexname只是您提供给索引的名称。如果要使用索引查询数据,则需要此名称。
keyPath:这定义了要在索引中寻址的对象的哪个属性。例如:您有一个对象
{ foo: "bar" }
Run Code Online (Sandbox Code Playgroud)
并且要查询foo属性,“ foo”将是您的键路径。密钥路径甚至可以走得更远。您可以访问嵌套属性
{ foo: { bar: "bla" } }
Run Code Online (Sandbox Code Playgroud)
如果要查询bar属性,则密钥路径将为“ foo.bar”
key:键是键路径中的值。正如您提到的,此键对于索引是唯一的,但这并不意味着此值在对象库中的所有对象上都必须是唯一的。
indexeddb中的索引的工作方式如下:创建索引时,它将创建一个新的对象存储,该对象将存储在该对象存储中。它们不是基于主键存储这些对象,而是根据键路径中存在的值存储它们。这意味着对于索引中的单个键,您可以具有多个对象。因此,如果您开始查询索引,它将对键进行过滤并返回这些键中存在的值。
希望这能使您清楚索引。
有关更多信息,我已经写了一些博客文章:有关使用键和Indexeddb基础的信息
Kya*_*Tun -6
Key = Row Item
indexName = Column name
keyPath = Column name
Run Code Online (Sandbox Code Playgroud)