Запрос объектов на индекс IDB - PullRequest
0 голосов
/ 01 июля 2018

Кажется, что это должно быть довольно просто, но я не могу понять, как запросить хранилище объектов на основе определенного индекса.

По базе данных создается так:

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

Я создал хранилище объектов reviews с индексом restaurant_id.

Сохраненные данные выглядят так:

{
  comment: "Mission Chinese Food has grown...",
  createdAt: 1504095567183,
  id: 1123
  restaurant_id: 1
}

Однако, когда я делаю get вызов как таковой:

db.transaction('reviews').objectStore('reviews').get('1')...

Я получаю объект, у которого id равен 1 или ничего, а не restaurant_id.

Как получить массив объектов, которые соответствуют указанному значению индекса?

1 Ответ

0 голосов
/ 01 июля 2018

Это, вероятно, будет работать:

db.transaction('reviews').objectStore('reviews').index('restaurant_id').getAll(1)

Отличия от вашей попытки:

  • Вы должны явно указать ему, какой индекс использовать, иначе он запросит первичный ключ, как вы заметили
  • get извлекает одну запись, но getAll извлекает массив всех записей, соответствующих запросу. Старые браузеры (и текущая версия Edge) не поддерживают getAll, но есть полифилл , если вам это нужно.
  • 1, а не '1', вероятно, была просто опечатка в вашем вопросе:)
...