QueryView 插件的视图玩法——统计每月阅读量

1、在文档内填入属性。如图所示:按格式填入键值(注意是中文:);

image.png

2、

根据属性值文本排序,例如年月:202410

  • //!js const query = async () => { let dv = Query.DataView(protyle, item, top); const SQL = ` SELECT (SELECT SUBSTR(content,4, 10) FROM blocks WHERE content REGEXP '^年月:[0-9]+(\.[0-9]+)?$' AND root_id = b.id LIMIT 1) AS month, COUNT(*) AS count FROM blocks b WHERE type = 'd' AND id IN (SELECT root_id FROM blocks WHERE content REGEXP '^时间:[0-9]+(\.[0-9]+)?$') GROUP BY month ORDER BY month`; let blocks = await Query.sql(SQL); dv.addeline(blocks.pick('month'), blocks.pick('count'), { title: '每月阅读量', xlabel: '月份', ylabel: '书籍数目' }); dv.render(); } return query();

3、结果如图:间接实现了模板列的查询统计image.png

4、疑问和求助

能否按月统计阅读时间?

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25385 引用 • 104855 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9708 引用 • 44169 回帖 • 90 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 不清楚你说的统计阅读时间是啥,我就按照我理解中的写了一下。

    在没有属性标识,单纯靠关键字来查询文档还是麻烦了一点,我后面想想看能不能加一些这方面的工具函数。

    //!js const contentReg = async (reg) => { return Query.sql(`select * from blocks where content REGEXP '^${reg}$'`); } const extractNumber = (blocks, prefix) => { return blocks.map(block => { const match = block.content.match(new RegExp(`${prefix}:([0-9]+(?:\\.[0-9]+)?)`)); return match ? { ...block, number: parseFloat(match[1]) } : null; }).filter(Boolean); }; const query = async () => { // 创建数据视图对象 let dv = Query.DataView(protyle, item, top); // 1. 构建 SQL 提取 content let with年月 = await contentReg('年月:[0-9]+(\.[0-9]+)?'); let with时间 = await contentReg('时间:[0-9]+(\.[0-9]+)?'); with年月 = extractNumber(with年月, '年月'); with时间 = extractNumber(with时间, '时间'); let 年月 = Query.utils.asMap(with年月, 'root_id'); let 时间 = Query.utils.asMap(with时间, 'root_id'); //按照相同的 root_id 字段将 with年月 和 with时间合并成一个大 list let documents = []; Object.keys(年月).forEach(root_id => { // 文档,年月数字,时间数字 documents.push({ root_id, 年月: 年月[root_id]?.number ?? '无法找到对应年月', 时间: 时间[root_id]?.number ?? 0 }) }); let results = []; //按照年月来分组,累加计算各个文档中的「时间」 Query.wrapit(documents).groupby('年月', (date, blocks) => { // 累加 blocks 中的时间 let sum = blocks.reduce((acc, cur) => acc + cur.时间, 0); // results.push({ // 年月: date, // 时间: sum // }); dv.addmd(`- ${date}, 总计阅读时间:${sum}`); }); dv.render(); } return query();

    这个实现的效果是,累加每个「年月」的阅读「时间」字段,然后汇总显示。
    具体的 js 代码看不懂可以喂给 GPT 解读一下。

    image.png

    1 回复
    谢谢大佬是这个意思!!太感谢了!我没看到怎么改成折线图
    mark-j
  • MasterYS

    我还以为他是从“渐进学习”学习的插件里面读取的数据,手动给每个文档做标记也太恐怖了,大佬有没有可能从渐进式读书直接读取现成数据啊,能读到已看分片和总分片就行。再或者直接读取他的进度

    图片.png

    2 回复
  • mark-j

    年月和阅读进度和时间,我是自己写了 quicker,从微信读书同步的;个人觉得还比较方便。只不过要是渐进阅读插件也能归纳进来更好。

    1 回复
  • mark-j

    image.png搭建完是这样的;时间统计不知道怎么改成折线图。

    1 回复
  • let results = Query.wrapit([]); //按照 root_id 字段分组 Query.wrapit(documents).groupby('年月', (date, blocks) => { // 累加 blocks 中的时间 let sum = blocks.reduce((acc, cur) => acc + cur.时间, 0); results.push({ 年月: date, 时间: sum }); // dv.addmd(`- ${date}, 总计阅读时间:${sum}`); }); dv.addeline(results.pick('年月'), results.pick('时间'));
  • MasterYS

    那你这个已经很方便了,就是写了数据进文档头部,其实还好,我主要没微信读书的习惯 😂 还没试过

    1 回复
  • mark-j

    我之前也想过,只用数据库管理,有一次误删过数据库。最后还是觉得这样保险,数据始终存储在文档内,不大可能丢失,等于数据库只是起到汇览的作用。

    1 回复
  • MasterYS

    你说的有道理,但是做好备份应该可以避免啊。还有个问题就是,你想分享的时候怎么办,数据库视图导出的时候好像不能显示吧

    1 回复
  • mark-j 1 评论

    image.png文本都可以显示啊!

    我可能没说清楚,我说的 QueryView 插件这部分,数据库查询出的东西,导出的时候显示不出来
    MasterYS
请输入回帖内容 ...

推荐标签 标签

  • Word
    13 引用 • 41 回帖 • 1 关注
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    35 引用 • 468 回帖 • 762 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    21 引用 • 245 回帖 • 228 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 465 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • 音乐

    你听到信仰的声音了么?

    62 引用 • 512 回帖
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 85 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    290 引用 • 4494 回帖 • 655 关注
  • Follow
    4 引用 • 12 回帖 • 12 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 609 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 648 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 657 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 29 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    693 引用 • 537 回帖
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖 • 1 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    5 引用 • 16 回帖 • 2 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖 • 1 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    168 引用 • 597 回帖
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    239 引用 • 224 回帖
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    116 引用 • 54 回帖 • 3 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    432 引用 • 1250 回帖 • 595 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1441 引用 • 10069 回帖 • 495 关注
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 1 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 1 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 564 关注