思源笔记创建 dailynote 很方便,但是我觉得思源笔记还一直欠缺对 dailynote 的全局管理和浏览
不方便从全局的角度来看这几天、这几周、这几个月每天在干什么
我最近几个月开始尝试用数据库来管理 dailynote,存放全年的 dailynote,发现这种方式可以很方便地快速回顾每日日记,可以通过建立视图,设置筛选条件来建立每月日记视图,还可以在数据库中添加打分、状态(灵感来源:微信状态)、总结、反思等列
这个数据库的位置,我会在年、每月的复盘笔记里
不过目前我只能创建 dailynote 后,再将其手动拖到数据库中,要是新建日记的时候,能自动化添加到指定的数据库,就会省心很多
于是提了一个 issue:创建 dailynote 支持自动添加到数据库 · Issue #12587 · siyuan-note/siyuan (github.com)
但暂时还没有回应,不知道官方会不会做
代码片段
看到有大佬写了自动把子文档添加到数据库的功能,见批量导入文档到数据库 0.0.6 版全新发布 - 链滴 (ld246.com)
参考了下,简单写了一个 js 代码片段,对 alt+5 快捷键进行监控(没有对左上方的创建日记按钮进行监控,因为不会),这样创建或打开日记时,就将 dailynote 放进指定的数据库
使用时,只需要配置数据库块 id 即可,变量为 dbBlockId
。
注意:本代码只会把所有笔记本创建的 dailynote 统统放进一个数据库里,有些人可能有多个笔记本,每个笔记本的 dailynote 如果需要放在不同的数据库,或者只有某个笔记本的 dailynote 才要放进数据库。本代码暂时没对这两种场景做优化,因为个人只用一个笔记本,暂时没有改进需求(代码能用就行哈哈哈)。
(async () => { // 标志变量,用于防止重复触发 let isCreatingDailyNote = false; const originalFetch = window.fetch; // 重写 fetch 函数 window.fetch = async function (...args) { // 检查是否是我们要监听的API调用 if (args[0] === '/api/filetree/createDailyNote' && args[1]?.method === 'POST' && !isCreatingDailyNote) { console.log('创建每日笔记的API被调用了!'); // 设置标志位,防止重复进入 isCreatingDailyNote = true; // 执行创建日记后的逻辑 await dailynoteAddDatabase(); // 重置标志位 isCreatingDailyNote = false; } // 调用原始的 fetch 函数并返回结果 return originalFetch.apply(this, args); }; // 创建日记的逻辑,监听创建每日笔记的事件时触发 async function dailynoteAddDatabase() { //设置日记自动存放的数据库块id const dbBlockId = '20240911002857-lgav146'; // 设置哪个笔记本创建日记才添加到数据库,其他笔记本创建日记代码不作用 const notebookID = '20241028223345-d9ifjv0'; // 获取当前选择笔记本 const boxid = window.siyuan.storage["local-dailynoteid"]; if (boxid === notebookID) { // 调用 /api/filetree/createDailyNote 获得日记 ID const create_dailynote_result = await fetchSyncPost('/api/filetree/createDailyNote', { notebook: boxid, app: siyuan.ws.app.appId }); const docID = create_dailynote_result.data.id; // 添加日记到数据库中 const db = await getDataBySql(`SELECT * FROM blocks where type ='av' and id='${dbBlockId}'`); if (db.length === 0) { console.error("未找到数据库文档块,请检查数据库文档块id是否正确"); return; } const avID = db.map(av => getDataAvIdFromHtml(av.markdown))[0]; // 检测 dailynote 是否已经在数据库里 let isInResult = await fetchSyncPost("/api/av/getAttributeViewKeys", { id: docID }); let foundItem = isInResult.data.find(item => item.avID === avID); if (foundItem && foundItem.keyValues) { console.log(docID + " 已经在数据库"); return; } // ------------添加日记到数据库 ------------ // // 组装文档数据参数 const srcs = [{ "id": docID, "isDetached": false, }]; const input = { "avID": avID, 'srcs': srcs }; await fetchSyncPost('/api/av/addAttributeViewBlocks', input); console.log(docID + " 添加到数据库"+avID); function getDataAvIdFromHtml(htmlString) { // 使用正则表达式匹配data-av-id的值 const match = htmlString.match(/data-av-id="([^"]+)"/); if (match && match[1]) { return match[1]; // 返回匹配的值 } return ""; // 如果没有找到匹配项,则返回空 } async function getDataBySql(sql) { const result = await fetchSyncPost('/api/query/sql', { "stmt": sql }); if (result.code !== 0) { console.error("查询数据库出错", result.msg); return []; } return result.data; } async function fetchSyncPost(url, data, returnType = 'json') { const init = { method: "POST", }; if (data) { if (data instanceof FormData) { init.body = data; } else { init.body = JSON.stringify(data); } } try { const res = await fetch(url, init); const res2 = returnType === 'json' ? await res.json() : await res.text(); return res2; } catch (e) { console.log(e); return returnType === 'json' ? { code: e.code || 1, msg: e.message || "", data: null } : ""; } } } } })();
最近对数据库的功能改进期待
之前用 notion,只觉得数据库折腾
现在用思源,才发现数据库,真好用呀真好用
期待下面的 issue,能早日推进
- 剪藏插件功能优化提议:绑定数据库 · Issue #10824 · siyuan-note/siyuan (github.com)
- 创建 dailynote 支持自动添加到数据库 · Issue #12587 · siyuan-note/siyuan (github.com)
- 新建文档和块引新建文档支持自动添加到指定数据库 · Issue #12588 · siyuan-note/siyuan (github.com)
- 数据库条目多选后右键支持复制块引用 · Issue #11520 · siyuan-note/siyuan (github.com)
- 数据库模板列获取其他列变量的优化 · Issue #11237 · siyuan-note/siyuan (github.com)
- 「添加到数据库」支持创建不存在的数据库 · Issue #11012 · siyuan-note/siyuan (github.com)
- 数据库支持隐藏视图 & 支持创建仅包含新视图的镜像数据库(即新建一个视图并隐藏其他视图) · Issue #10734 · siyuan-note/siyuan (github.com)
- 数据库支持设置新建文档存放位置和文档内容模板 The database supports setting create doc save path and template · Issue #11479 · siyuan-note/siyuan (github.com)
- 编辑器顶部添加数据库属性面板 · Issue #11371 · siyuan-note/siyuan (github.com)
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于