程序员老鬼

带你玩转 Obsidian Dataview,把笔记变成会思考的数据库

要说 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)的语法去查询这些数据。它支持四种方式来“调戏”你的笔记:
  1. DQL 查询 (最简单,像 SQL 一样)
  2. 内联表达式 (在正文中直接嵌入小计算)
  3. DataviewJS (JavaScript 完全体模式)
  4. 内联 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. 下载与安装

离线安装(国内风格)
    1. 如果你无法在线安装插件,别担心,我已经把热门插件下载好了
    2. 点击下方公众号,回复关键字: Obsidian ,获取Obsidian资料合集。
(注意,这个步骤别急着开头就做,先把功能摸透更有动力) Dataview 是社区插件,所以需要先在 Obsidian 里开启第三方插件支持:
  1. 打开 设置 → 社区插件
  2. 启用“安全模式”开关
  3. 点击“浏览”,搜索 Dataview
  4. 点击“安装”,然后“启用”
安装完成后,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实操案例课》,便可免费加入「玩转效率笔记」社群,与一群人交流效率提升的经验,实现自我管理的目标。 图片