gpt4 book ai didi

javascript - IDBObjectStore.createIndex() 中 keyPath 的用途是什么?

转载 作者:搜寻专家 更新时间:2023-11-01 05:03:30 33 4
gpt4 key购买 nike

我一直在阅读 MDN,但我得到了 stuff like :

keyPath
The key path for the index to use. Note that it is possible to create an index with an empty keyPath, and also to pass in a sequence (array) as a keyPath.

好吧,不是 s@!t,keyPath 是关键路径。但那是什么?

总共examples ,它与列名(或索引,他们称之为)相同:

  objectStore.createIndex("hours", "hours", { unique: false });
objectStore.createIndex("minutes", "minutes", { unique: false });
objectStore.createIndex("day", "day", { unique: false });
objectStore.createIndex("month", "month", { unique: false });
objectStore.createIndex("year", "year", { unique: false });

They say你可以通过:

  • 空字符串 - ""
  • 一个有效的 JavaScript 标识符(我假设这意味着有效的 JS 变量名)
  • 以句点分隔的多个 javascript 标识符,例如:"name.name2.foo.bar"
  • 包含上述任何一项的数组,例如:["foo.bar","","name"]

我无法想象这有什么用。我完全不明白 keyPath 是什么,我可以用它做什么。有人可以提供示例用法,其中 keyPath 不是列名吗?解释 keyPath 的值对数据库有什么影响?

最佳答案

示例可能会有所帮助。如果将键路径与对象存储一起使用,则可以从存储的对象中提取键,而不必在每次 put() 调用时都指定它们。例如,对于只有 ID 和名称的记录,您可以使用记录的 ID 作为对象存储的主键:

store = db.createObjectStore('my_store', {keyPath: 'id'});
store.put({id: 987, name: 'Alice'});
store.put({id: 123, name: 'Bob'});

这给你这家商店:

key   | value
------+-------------------
123 | {id: 123, name: 'Bob'}
987 | {id: 987, name: 'Alice'}

但是如果你想按名字查找记录,你可以创建一个索引:

name_index = store.createIndex('index_by_name', 'name');

它给你这个索引:

key     | primary key | value
--------+-------------+--------------------------
'Alice' | 987 | {id: 987, name: 'Alice'}
'Bob' | 123 | {id: 123, name: 'Bob'}

(索引并不真正存储值的副本,只是存储主键。但这种方式更容易可视化。这也解释了如果您遍历索引,您将在游标上看到的属性。)

现在您可以通过名称查找记录:

req = name_index.get('Alice')

当记录被添加到存储中时,键路径用于生成索引的键。

带有 . 分隔符的关键路径可用于查找更复杂的记录。作为数组的键路径可以生成复合键(其中键本身是一个数组)或多个索引条目(如果指定了 multiEntry: true)

关于javascript - IDBObjectStore.createIndex() 中 keyPath 的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47838111/

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