Dexie:如何按日期查询?

Posted

技术标签:

【中文标题】Dexie:如何按日期查询?【英文标题】:Dexie: how to query by date? 【发布时间】:2021-09-12 22:08:45 【问题描述】:

我正在尝试构建一个“日志”表(我的目标是了解应用程序的使用时间),因此我创建了一个函数来检测用户是否在一段时间后处于非活动状态。

表格是这样的:

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

所以基本上用户估计的时间是这两个日期之间的差异(在这种情况下是 2h 0m 38s)

我的目标是拥有几个这样的日志,然后在上面运行一个循环并记录用户“今天”花费的秒数

如何在 Dexie 上查询?

我试过await dblogs.aLogs.get(session_start : "2021/06/30");,但它返回未定义

【问题讨论】:

【参考方案1】:

您可能应该有以下索引:

[user_id+story_id+session_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

【讨论】:

以上是关于Dexie:如何按日期查询?的主要内容,如果未能解决你的问题,请参考以下文章

Dexie JS - 结合条件过滤器和文本搜索

在 JavaScript 文件中添加 Dexie.js 查询会提示缺少类型

SQL中按日期进行查询,如何截取日期进行查询

如何按日期过滤并按代码进行表单查询?

如何按日期限制查询

如何编写按日期接收数据组的查询?