要说 Obsidian 这个宝藏软件里让我眼前一亮的插件,Dataview 绝对是能让我从椅子上“啪”地坐直的那种存在。它不是什么花里胡哨的美化皮肤,也不是个简单的“加个按钮”那种小插件,它是直接给你的笔记加了个“数据库引擎”!换句话说,你的笔记瞬间从一堆静态的 markdown 文档,变成了可查询、可统计、可分析的“信息仓库”,而且这一切都在本地完成,不用担心隐私外泄。
我第一次用 Dataview 的时候,感觉就像是给我的笔记本里塞进了个 Excel + SQL + 任务管理系统的合体怪兽。以前在笔记里找资料,基本靠人肉翻文件夹,靠搜索框拼命试关键词;现在直接来一句
TABLE time-played, length, rating FROM "games"
,我的所有游戏记录瞬间排好队,甚至还能按评分从高到低列出来,效率直接飞升三层楼。而且这不是只能查查列表这么简单,你要是懂点 JavaScript,还能用 DataviewJS 把数据折腾成各种花样,分组统计、时间轴展示、自动生成任务列表,完全就是 Obsidian 里的数据黑科技。
我知道有些朋友一听到“数据库”“查询语言”就开始头皮发麻,觉得这是不是要像学 SQL 一样啃半本书。其实,Dataview 对新手也挺友好的,基础用法就几个关键词,比如
table
、
list
、
task
,几分钟就能上手出效果。而且你笔记里的元数据,既可以写在文件头的 YAML 里,也可以直接在正文里用
Key:: Value
的方式加,不用改变原有的笔记习惯,就能让 Dataview 识别出来。
那咱就先聊聊它的核心功能和原理,然后再带你走一遍从下载、安装到上手的全过程,中途还会给你几个我自己用得爽到飞的例子,保证看完你就能直接在自己的 Vault 里开干。
1. Dataview 是个啥?
鬼哥翻译一下官方的说法:Dataview 会扫描你整个 Obsidian Vault,把每个 markdown 文件里的
元数据
(metadata)提取出来,然后你就能用一种叫 DQL(Dataview Query Language)的语法去查询这些数据。它支持四种方式来“调戏”你的笔记:
-
DQL 查询
(最简单,像 SQL 一样)
-
内联表达式
(在正文中直接嵌入小计算)
-
DataviewJS
(JavaScript 完全体模式)
-
内联 JS
(在正文里直接执行 JS)
它能干的事包括:
-
列表、表格、任务清单的自动生成
-
数据的分组、排序、过滤
-
嵌入 JS 逻辑做复杂分析
-
动态展示文件的属性,比如最后修改时间
用一句话总结:Dataview 让你的笔记“活”了起来。
2. 元数据怎么写?(重点!)
Dataview 吃的“粮食”就是元数据,而元数据有两种主要写法:
写在 YAML Frontmatter(文件头)
---
alias: "The Witcher 3"
time-played: 120
rating: 9.8
genre: CRPG
---
这种写法的好处是结构化、规范,Dataview 能百分百准确识别。
写成 Inline Fields(行内元数据)
Time Played:: 120
Rating:: 9.8
Genre:: CRPG
优点是灵活,可以直接混在笔记正文里,不影响阅读体验。
鬼哥的建议:如果是任务类、游戏记录这种对数据分析要求高的内容,用 YAML;如果只是随手标记一些信息,用行内元数据就够了。
3. 核心查询方式
3.1 DQL 查询(最常用)
例子:列出
games
文件夹下的游戏,按评分倒序排
table time-played, length, rating
from "games"
sort rating desc
3.2 列表查询
例子:找出所有标了
#game/moba
或
#game/crpg
标签的游戏
list from #game/moba or #game/crpg
3.3 任务查询
例子:列出
#projects/active
里的未完成任务
task from #projects/active
3.4 DataviewJS(进阶玩法)
例子:按类别分组统计 2021 年读的书,并按评分排序
for (let group of dv.pages("#book").where(p => p["time-read"].year == 2021).groupBy(p => p.genre)) {
dv.header(3, group.key);
dv.table(["Name", "Time Read", "Rating"],
group.rows
.sort(k => k.rating, 'desc')
.map(k => [k.file.link, k["time-read"], k.rating]))
}
JS 版本的自由度是 DQL 的几十倍,特别适合做复杂的统计和可视化。
4. 下载与安装
离线安装(国内风格)
-
如果你无法在线安装插件,别担心,我已经把热门插件下载好了
-
点击下方公众号,回复关键字:
Obsidian
,获取Obsidian资料合集。
(注意,这个步骤别急着开头就做,先把功能摸透更有动力)
Dataview 是社区插件,所以需要先在 Obsidian 里开启第三方插件支持:
-
打开
设置 → 社区插件
-
启用“安全模式”开关
-
点击“浏览”,搜索
Dataview
-
点击“安装”,然后“启用”
安装完成后,Vault 里就能直接使用
dataview
和
dataviewjs
代码块了。
5. 使用场景举例(鬼哥的私货)
游戏记录管理
我在
games
文件夹里每个游戏一篇笔记,元数据记录时长、评分、类型,然后用 Dataview 一秒生成排行榜。朋友来家里聚会选游戏?我直接按评分降序输出,堪比 Steam 推荐页。
读书笔记回顾
每本书的笔记文件头写好
time-read
、
rating
、
genre
,然后用分组统计的 DataviewJS 脚本,直接生成“2024 年读书榜”,看自己这一年到底偏爱科幻还是推理。
项目任务追踪
在项目笔记里写任务清单,配合标签
#projects/active
,用任务查询模式生成一个跨文件的动态待办板,比单文件 Todo 清单强多了。
6. 我的几点心得
-
先有数据再谈查询
:不要一上来就想写复杂的查询,先把元数据填好再说。
-
命名要统一
:比如
time-read
、
time_played
混用会让查询翻车。
-
DQL 够用,但 JS 更爽
:会点 JavaScript 的,直接上 DataviewJS,能玩出花来。
-
安全性
:普通 DQL 查询是沙盒的很安全,但 JS 查询能读写文件,要小心跑别人的脚本。
我自己用 Dataview 最大的感受是,它让笔记不再只是“记下来”,而是能随时“用起来”。以前我总觉得笔记是个存档柜,现在更像一个动态的知识面板,想看什么、想对比什么,敲几行代码就能出来。甚至我有时候会为了能让 Dataview 统计得更漂亮,特意去整理元数据,这反而让我的笔记结构越来越清晰。
如果你用 Obsidian 已经不满足于“存笔记”,想让它变成一个随时可分析的知识数据库,Dataview 真值得你认真折腾一番。
点击下方公众号,回复关键字:
Obsidian
,获取Obsidian资料合集。
-END
-
ok,今天先说到这,如果你想更深入的了解Obsidian,现在只要购买我们的《Obsidian实操案例课》,便可免费加入「玩转效率笔记」社群,与一群人交流效率提升的经验,实现自我管理的目标。