IndexedDB-什么是Key,keyPath和indexName?

Wal*_*r M 4 javascript html5 indexeddb

我来自MySQL,已经习惯了常规的数据库表方案。我在理解IndexedDB及其某些术语时遇到了麻烦。我在文档中查询了这些定义:

关键字 一个数据值,通过该数据值可以在对象存储中组织和检索存储的值。

indexName 要创建的索引的名称。

keyPath 要使用的索引的密钥路径。

基本上,Key就像MySQL中的主键,对吗?是INDEXNAME同样的事情列?而且我不知道keyPath是什么。

有人可以为我解释这些吗?再次感谢您的耐心:)。

小智 6

是的,key就像SQL中的主键一样。但其他人似乎缺少一个例子说明你的问题的主要部分,那就是区分indexNamekeyPath。在Mozilla 创建索引页面中,

indexName 要创建的索引的名称。请注意,可以使用空名称创建索引。

keyPath 要使用的索引的密钥路径。请注意,可以使用空的keyPath创建索引,也可以将序列(数组)作为keyPath传递。

indexName是你使用访问索引内容。索引用于在数据库中搜索该“列”。的keyPath是实际的名称“一栏。” 有关其他形式的信息,请参见其他问题和解答keyPath请注意,“列”在技术上并不正确,但是我正在使用它,因为这就是您所使用的。

例如,假设您的数据包含该列,hours并且您希望能够在该列上搜索数据库。创建数据库时,您将为该列创建索引:

objectStore.createIndex(indexName, keyPath, { unique: false });
Run Code Online (Sandbox Code Playgroud)

indexName您想要的任何内容都可以在哪里,例如hoursColumnkeyPath可以是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是要在其上搜索的存储数据的实际名称。


Kri*_*ave 5

索引是一种使查询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基础的信息

  • 哇,我还是完全迷失了。 (2认同)

Kya*_*Tun -6

Key       = Row Item
indexName = Column name
keyPath   = Column name
Run Code Online (Sandbox Code Playgroud)