Декси: как сделать запрос по дате?

#javascript #php #laravel #indexeddb #dexie

Вопрос:

Я пытаюсь создать таблицу «журналы» (мои цели-узнать, сколько времени используется приложение), поэтому я создал функцию, которая определяет, неактивен ли пользователь по истечении определенного периода времени.

Таблица выглядит так:

 dblogs.version(1).stores({
    aLogs: "  id, story_id, user_id, session_start, session_end, words_written"
});
 

Поэтому, когда пользователь активен, я создаю новую запись в aLogs, например:

 0, 1 , 19 , 2021/06/30 10:15:10
 

пользователь 19 начал печатать в 2021/06/30 10:15:10 (это происходит в session_start), затем, если пользователь становится неактивным, я добавляю текущую дату и время в session_end

Пример:

   0, 1 , 19 , 2021/06/30 10:15:10, 2021/06/30 12:15:48
 

таким образом, в основном расчетное время пользователя-это разница между этими 2 датами (в данном случае 2 часа 0 минут 38 минут).

моя цель состоит в том, чтобы иметь несколько таких журналов, затем запустить цикл по ним и записать количество секунд, потраченных пользователем «сегодня».

как мне запросить это у Декси?

Я пробовал await dblogs.aLogs.get({session_start : "2021/06/30"}); , но он возвращается неопределенным

Ответ №1:

Вероятно, у вас должен быть следующий индекс:

[идентификатор пользователя идентификатор истории начало сеанса]

Это позволит эффективным запросам извлекать все записи журнала для данного пользователя, истории и дня:

 const result = await dblogs.aLogs
    .where('[user_id story_id session_start]')
    .between (
      [userId, storyId, dayStart],
      [userId, storyId, dayEnd])
    .toArray();

const totalSpentToday = results.reduce(
  (sum, {session_start, session_end}) =>
    sum   Math.min(dayEnd, session_end) - session_start);
 

Если вам нужно перехватить сеансы, которые перекрываются между вчерашней и текущей датой, вы можете рассмотреть возможность корректировки начала дня (в предложении «между») до некоторого разумного количества часов до начала дня, а затем из результата игнорировать (вычесть) продолжительность, которая не соответствует текущей дате.

Подробнее о составных индексах читайте здесь: https://dexie.org/docs/Compound-Index