如何解决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,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
解决方法
您可能应该有以下索引:
[user_id+story_id+session_start]
这将允许高效查询来检索给定用户、故事和日期的所有日志条目:
const result = await dblogs.aLogs
.where('[user_id+story_id+session_start]')
.between (
[userId,storyId,dayStart],[userId,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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。