我一直在MDN周围阅读,但我得到stuff like:
keyPath
索引使用的关键路径。请注意,可以使用空keyPath
创建索引,也可以将序列(数组)作为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 });
你可以传递的
""
"name.name2.foo.bar"
["foo.bar","","name"]
我无法想象它的用途是什么。我绝对不明白keyPath
是什么,我可以用它做什么。有人可以提供示例用法,其中keyPath
不是列名吗?解释keyPath
的值对数据库有什么影响?
答案 0 :(得分:5)
示例可能有所帮助。如果使用带有对象存储的键路径,则可以从存储的对象中取出键,而不必在每次put()调用时指定它们。例如,对于只有id和name的记录,您可以使用记录的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
)
答案 1 :(得分:0)
密钥路径是指示indexedDB对象的哪些属性扮演特殊角色的方式。类似于向SQL数据库指示表中某个列是表的主键的方式,或者如何告诉数据库在表中的一个或多个特定列上创建索引。
换句话说,它是indexedDB实现在确定应该使用哪个属性进行某些计算时应遵循的路径。例如,在使用给定键搜索值时。
它是一个路径,而不是一个简单的密钥,因为它认为对象属性值也可以是对象。换句话说,有一个层次结构。例如,{a:{b:1}}
。 "路径"值1是" a.b"。路径是要访问以获取值的属性序列。
名称的关键部分表示列起着重要作用。例如,在标识主键属性或特定索引属性时。
在indexedDB实现只是将整个对象视为一个属性包的意义上忽略了不属于keypath的属性,并且只关注那些属性,或者获得那些属性的意识,这些属性是的keyPath。