前几篇聊了知识库怎么搭、怎么填、怎么搜。这篇说一个省力的事——让笔记自己汇总。
知识库一大了,麻烦的不是找不到东西,是维护索引。今天建了个目录,明天加了 20 篇新笔记,目录就过时了。手动更新不想干,不更新吧,新笔记丢进去跟进了黑洞一样。
Dataview 就是干这个用的。
这玩意儿是 Obsidian 的一个插件,能用类似查询的语法翻笔记。
不是真正的 SQL,语法更简单,专为 Markdown 文件设计。想知道「最近一个月改过的所有笔记」?一行就行:
TABLE file.mtime AS "修改时间" FROM "笔记" SORT file.mtime DESC LIMIT 10
不用手动维护任何列表。数据是活的——改了笔记,查询结果自动更新。
装了先做什么
装完 Dataview,不用急着学语法。先做一件事:确保每篇笔记开头都有规范的 frontmatter。
就是那几行 --- 之间的内容:
--- title: "笔记标题" created: 2026-06-01 tags: - "领域/运维" status: stable ---
Dataview 查的就是这些字段。没有 frontmatter 的笔记,在查询里根本查不到。所以第一步是养成写 frontmatter 的习惯——哪怕只写 title 和 created 两个字段也够用。
三个实用场景
我的 vault 里跑了十几个 Dataview 查询,最常用的就这三个。
场景一:自动目录
不用手动维护索引文件了。建一个笔记,写一行查询,目录自动生成。
TABLE file.link AS "文件", file.mtime AS "最后修改" FROM "资料库" SORT file.mtime DESC
每次打开这个页面,看到的是最新的东西。新笔记写进去自动出现,删了的自动消失。
场景二:按状态看进度
笔记有 status 字段(draft/review/stable/archived)的话,这么查:
LIST FROM "笔记" WHERE status = "draft" SORT file.cday DESC
所有未完成的草稿一目了然。不用记哪些写了没改完——查询本身就是待办清单。
场景三:按标签汇总
把所有打了领域/运维的笔记汇总到一张看板上:
TABLE file.mtime AS "更新时间", status AS "状态" WHERE contains(tags, "领域/运维") SORT file.mtime DESC
进阶玩法:FLATTEN + 标签聚合
一篇笔记有多个标签,想按单个标签展开统计,就用 FLATTEN:
TABLE rows.file.link AS "相关笔记" FLATTEN tags AS tag WHERE contains(tag, "领域/") SORT tag ASC GROUP BY tag
效果是按领域分组,每组下面列出对应笔记。等于自动生成了一个「领域→笔记」映射表。
几个小坑
Dataview 整体很稳定,但有几个地方容易摔。
查询多了影响性能。vault 超过5000篇笔记后,每次打开跑5到6个查询会有明显延迟。解决方案是加LIMIT,或者只在需要时才打开查询页面。
不要在表格里用带 | 的 wikilink。[[笔记|显示文本]] 里面的竖线会被表格解析器吃掉,链接就断了。表格里只用 [[笔记]]。
查询结果不能编辑。Dataview 是只读的——想改数据要回到源文件改 frontmatter。
中文排序有时不准。中文姓氏按拼音排可能不是想要的结果。用 SORT 之前先确认排序逻辑。
Dataview 的核心价值不是学一门新语言,是不需要再手动维护那些一定会过时的列表和目录。
前几篇讲了采集、分类、搜索、AI辅助。这些是「往库里放东西」和「从库里找东西」。Dataview 解决的是中间那件事——「让库里已有的东西自己组织起来」。三个事都做全了,知识库才算真正跑起来。
系列到这篇,基本把知识库从搭到用的每个环节都聊了一遍。还有什么想聊的话题,欢迎留言。