查询索引 IDB 上的对象

the*_*het 1 node.js indexeddb

看起来应该很简单,但我不知道如何根据某个索引查询对象存储。

按数据库创建如下:

dbPromise = idb.open(idb_name, idb_version, db => {
  const reviewStore = db.createObjectStore('reviews', {
    keyPath: 'id'
  });
  reviewStore.createIndex('restaurant_id', 'restaurant_id', {unique: false});
});
Run Code Online (Sandbox Code Playgroud)

我已经创建了reviews带有索引的对象存储restaurant_id

存储的数据如下所示:

{
  comment: "Mission Chinese Food has grown...",
  createdAt: 1504095567183,
  id: 1123
  restaurant_id: 1
}
Run Code Online (Sandbox Code Playgroud)

但是,当我get这样拨打电话时:

db.transaction('reviews').objectStore('reviews').get('1')...
Run Code Online (Sandbox Code Playgroud)

id我得到的是 1 或什么都不是的对象,而不是restaurant_id.

如何检索与指定索引值匹配的对象数组?

dum*_*ter 5

这可能会起作用:

db.transaction('reviews').objectStore('reviews').index('restaurant_id').getAll(1)
Run Code Online (Sandbox Code Playgroud)

与您的尝试的差异:

  • 您必须明确告诉它要使用什么索引,否则它将查询主键,正如您所注意到的
  • get检索单个记录,但getAll检索与查询匹配的所有记录的数组。旧浏览器(以及当前版本的 Edge)不支持getAll,但如果您需要的话,可以使用polyfill
  • 1而不是'1',可能只是您问题中的拼写错误:)