IndexedDB - это способ хранить данные в браузере.

Это позволяет нам хранить большие объемы данных, чем локальное хранилище, асинхронным способом.

Dexie упрощает работу с IndexedDB.

В этой статье мы рассмотрим, как начать работать с IndexedDB с Dexie.

Игнорировать первые n элементов перед заданным смещением

Мы можем вызвать метод offset, чтобы вернуть первые n элементов после заданного смещения.

Например, мы можем использовать его, написав:

const db = new Dexie("friends");
db.version(1).stores({
  friends: "id, name, age"
});
(async () => {
  await db.friends.put({
    id: 1,
    name: "jane",
    age: 78
  });
  await db.friends.put({
    id: 2,
    name: "mary",
    age: 76
  });
  await db.friends
    .orderBy('name')
    .offset(10);
})()

Затем мы пропускаем первые 10 результатов в коллекции и включаем остальные.

Логическая операция ИЛИ

Мы можем использовать метод or, чтобы объединить 2 условия вместе с оператором логического ИЛИ в запросе.

Например, мы можем написать:

const db = new Dexie("friends");
db.version(1).stores({
  friends: "id, name, age"
});
(async () => {
  await db.friends.put({
    id: 1,
    name: "jane",
    age: 78
  });
  await db.friends.put({
    id: 2,
    name: "mary",
    age: 76
  });
  const someFriends = await db.friends
    .where("name")
    .equalsIgnoreCase("jane")
    .or("age")
    .above(40)
    .sortBy("name")
  console.log(someFriends)
})()

Мы вызываем where с аргументом 'name' для запроса по имени.

И мы находим записи с заданным именем с equalsIgnoreCase.

Затем мы вызываем or, чтобы найти элементы с age выше 40.

И мы вызываем sortBy для сортировки по полю name.

Получить массив, содержащий все первичные ключи коллекции

Мы можем использовать метод primaryKeys, чтобы вернуть обещание с массивом первичных ключей в коллекции.

Например, мы можем использовать его, написав:

const db = new Dexie("friends");
db.version(1).stores({
  friends: "id, name, age"
});
(async () => {
  await db.friends.put({
    id: 1,
    name: "jane",
    age: 78
  });
  await db.friends.put({
    id: 2,
    name: "mary",
    age: 76
  });
  const keys = await db.friends
    .where("name")
    .equalsIgnoreCase("jane")
    .primaryKeys()
  console.log(keys)
})()

id - это первичный ключ каждой записи.

Затем мы вызываем primaryKeys, чтобы вернуть обещание с массивом первичных ключей.

Получите сырые результаты

Мы можем получить необработанные результаты запроса с помощью метода raw.

Результаты не будут фильтроваться через крючки для чтения.

Например, мы можем написать:

const db = new Dexie("friends");
db.version(1).stores({
  friends: "id, name, age"
});
(async () => {
  await db.friends.put({
    id: 1,
    name: "jane",
    age: 78
  });
  await db.friends.put({
    id: 2,
    name: "mary",
    age: 76
  });
  const keys = await db.friends
    .where("name")
    .equalsIgnoreCase("jane")
    .raw()
    .toArray()
  console.log(keys)
})()

использовать это.

Использование raw не приведет к таким вещам, как сопоставление объектов с их сопоставленным классом.

Заключение

Мы можем игнорировать первые n элементов результатов, получать первичные ключи и получать необработанные результаты из коллекции IndexedDB с помощью Dexie.