IndexedDB Dexie:如何按日期查询?

e0uiprwp  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(1)|浏览(232)

我试图建立一个“日志”表(我的目标是知道应用程序被使用了多少时间),所以我创建了一个功能,检测用户是否在一段时间后不活动。
表是这样的:

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

用户192021/06/30 10:15:10开始键入(这进入session_start),如果用户变为非活动状态,我将当前日期时间添加到session_end
示例:

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

因此,基本上用户估计的时间是这两个日期之间的差值**(在本例中为2h 0m 38s)**
我的目标是有几个这样的日志,然后在上面运行一个循环,并讲述用户“今天”花费的秒数
我如何在Dexie上查询这个?
我尝试了await dblogs.aLogs.get({session_start : "2021/06/30"});,但它返回undefined

yzuktlbb

yzuktlbb1#

您可能应该具有以下索引:
[user_id+故事_id+会话_start]
这将允许高效查询来检索给定用户、故事和日期的所有日志条目:

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);

如果您需要捕获在昨天和当前日期之间重叠的会话,您可以考虑将dayStart(在between子句中)调整为dayStart之前的某个合理的小时数,然后从结果中忽略(减去)不在当前日期内的持续时间。
在此处阅读有关复合索引的更多信息:https://dexie.org/docs/Compound-Index

相关问题